- 浏览: 165154 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dengshh:
[flash=200,200][url][img][list] ...
memcache to java -
a13597418943:
struts2 Preparable接口
概念
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型[指 所操作的数据类型被指定为一个参数]
好处
安全简单
没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率
普通---------------------------------------------------------------------------------------------------------------------- public class Gene { public static void main(String args[]) { Point<String> p = new Point<String>(); // 里面的var类型为String类型 p.setVar("it"); // 设置字符串 System.out.println(p.getVar()); } } class Point<T> { // T-->标识符号[随意写,T是type的简称] private T var; // var的类型由T指定,即:由外部指定 public T getVar() { // 返回值的类型由外部决定 return var; } public void setVar(T var) { // 设置的类型也由外部决定 this.var = var; } }; class Notepad<K,V>{ // 此处指定了两个泛型类型 private K key ; // 此变量的类型由外部决定 private V value ; // 此变量的类型由外部决定 public K getKey(){ return this.key ; } public V getValue(){ return this.value ; } public void setKey(K key){ this.key = key ; } public void setValue(V value){ this.value = value ; } }; public class GenericsDemo09{ public static void main(String args[]){ Notepad<String,Integer> t = null ; // 定义两个泛型类型的对象 t = new Notepad<String,Integer>() ; // 里面的key为String,value为Integer t.setKey("汤姆") ; // 设置第一个内容 t.setValue(20) ; // 设置第二个内容 System.out.print("姓名;" + t.getKey()) ; // 取得信息 System.out.print(",年龄;" + t.getValue()) ; // 取得信息 } }; 通配符------------------------------------------------------------------------------------------------------------------- public class Gene { public static void main(String args[]){ Info<String> i = new Info<String>() ; // 使用String为泛型类型 i.setVar("it") ; // 设置内容 fun(i) ; } public static void fun(Info<?> temp){ // 可以接收任意的泛型对象 System.out.println( temp) ; } } class Info<T>{ private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; } }; 受限泛型------------------------------------------------------------------------------------------------------------ public class Gene { public static void main(String args[]) { Info<Integer> i1 = new Info<Integer>(); // 声明Integer的泛型对象 Info<Float> i2 = new Info<Float>(); // 声明Float的泛型对象 i1.setVar(30); // 设置整数,自动装箱 i2.setVar(30.1f); // 设置小数,自动装箱 fun(i1); fun(i2); } public static void fun(Info<? extends Number> temp) { // 只能接收Number及其Number的子类 System.out.print(temp + "--"); } } class Info<T> { private T var; // 定义泛型变量 public void setVar(T var) { this.var = var; } public T getVar() { return this.var; } public String toString() { // 直接打印 return this.var.toString(); } }; public class Gene { public static void main(String args[]){ Info<String> i1 = new Info<String>() ; // 声明String的泛型对象 Info<Object> i2 = new Info<Object>() ; // 声明Object的泛型对象 i1.setVar("hello") ; i2.setVar(new Object()) ; fun(i1) ; fun(i2) ; } public static void fun(Info<? super String> temp){ // 只能接收String或Object类型的泛型 System.out.print(temp + "、") ; } } class Info<T> { private T var; // 定义泛型变量 public void setVar(T var) { this.var = var; } public T getVar() { return this.var; } public String toString() { // 直接打印 return this.var.toString(); } }; 泛型无法向上转型---------------------------------------------------------------------------------------------------- public class Gene { public static void main(String args[]) { Info<String> i1 = new Info<String>(); // 泛型类型为String Info<Object> i2 = null; i2 = i1; // 这句会出错 incompatible types } } class Info<T> { private T var; // 定义泛型变量 public void setVar(T var) { this.var = var; } public T getVar() { return this.var; } public String toString() { // 直接打印 return this.var.toString(); } }; 泛型接口---------------------------------------------------------------------------------------------------------------- interface Info<T>{ // 在接口上定义泛型 public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型 } class InfoImpl<T> implements Info<T>{ // 定义泛型接口的子类 private T var ; // 定义属性 public InfoImpl(T var){ // 通过构造方法设置属性内容 this.setVar(var) ; } public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } }; public class GenericsDemo24{ public static void main(String arsg[]){ Info<String> i = null; // 声明接口对象 i = new InfoImpl<String>("汤姆") ; // 通过子类实例化对象 System.out.println("内容:" + i.getVar()) ; } }; ---------------------------------------------------------- interface Info<T>{ // 在接口上定义泛型 public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型 } class InfoImpl implements Info<String>{ // 定义泛型接口的子类 private String var ; // 定义属性 public InfoImpl(String var){ // 通过构造方法设置属性内容 this.setVar(var) ; } public void setVar(String var){ this.var = var ; } public String getVar(){ return this.var ; } }; public class GenericsDemo25{ public static void main(String arsg[]){ Info i = null; // 声明接口对象 i = new InfoImpl("汤姆") ; // 通过子类实例化对象 System.out.println("内容:" + i.getVar()) ; } }; 泛型方法---------------------------------------------------------------------------------------------------------------- public class Gene { public static void main(String args[]) { Demo d = new Demo(); // 实例化Demo对象 String str = d.fun("汤姆"); // 传递字符串 int i = d.fun(30); // 传递数字,自动装箱 System.out.println(str); System.out.println(i); } } class Demo { public <T> T fun(T t) { // 可以接收任意类型的数据 return t; // 直接把参数返回 } }; 泛型数组---------------------------------------------------------------------------------------------------------------- public class Gene { public static void main(String args[]){ Integer i[] = fun1(1,2,3,4,5,6) ; // 返回泛型数组 fun2(i) ; } public static <T> T[] fun1(T...arg){ // 接收可变参数 return arg ; // 返回泛型数组 } public static <T> void fun2(T param[]){ // 前面的<T>只是定义这是个支持泛型的方法 System.out.print("接收泛型数组:") ; for(T t:param){ System.out.print(t + "、") ; } } }
发表评论
-
java Obj getClass
2012-12-14 15:31 3778[size=large] 所 ... -
java proxy model
2012-08-23 15:57 1328代理模式 :为其他对象 ... -
new关键字、newInstance()方法
2012-08-21 10:58 1411new关键字和newInstance()方法的区别: new ... -
Singleton code
2012-08-20 17:17 864第一种(懒汉,线程不安全): Java代码 publi ... -
Singleton mode
2012-08-20 16:27 1035单例模式::保证一个 ... -
java interface and abstract-2
2012-08-17 12:02 1088abstract class 和interface 是支持抽象 ... -
java interface and abstract
2012-08-17 09:56 942java编程思想中说“万物皆对象”; 我们知道所有的对象都 ... -
request 、response 跳转定向
2012-08-19 11:34 1486尽管HttpServletResponse.sendR ... -
java try catch 陋习
2012-08-17 09:56 11911 OutputStreamWriter out = . ... -
Factory Method
2012-08-16 09:58 925Factory Method: 定义一个创建产品对象的工厂接口 ... -
java 基础 map
2012-08-15 11:14 1781Map[HashMap TreeMap] HashMap是采用 ... -
java 基础-- list
2012-08-13 16:27 939首先看一下LinkedList和ArrayList的继承关系。 ...
相关推荐
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...
Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
综上所述,虽然Java泛型在编译后会进行类型擦除,但通过上述技巧,我们仍然能够在运行时获得关于泛型类实例化类型的一些信息。在实际开发中,这些方法可以帮助我们编写更加灵活和安全的代码。在示例文件`GenericRTTI...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入。这个特性极大地提高了代码的类型安全性和可读性,减少了在运行时出现ClassCastException的可能性。SUN公司的Java泛型编程文档,包括...
下面我们将详细探讨Java泛型接口的相关知识点。 1. **泛型接口的定义** 泛型接口的定义方式与普通接口类似,只是在接口名之后添加了尖括号`<T>`,其中`T`是一个类型参数,代表某种未知的数据类型。例如: ```java...
下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...
Java 泛型是一种强大的工具,它允许我们在编程时指定变量的类型,提供了编译时的类型安全。然而,Java 的泛型在运行时是被擦除的,这意味着在运行时刻,所有的泛型类型信息都会丢失,无法直接用来创建对象或进行类型...
Java泛型是Java编程语言中的一个强大特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。这使得代码更加安全、可读性更强,并且能够减少类型转换的必要。在“java泛型的内部原理及更深应用”这个...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
"Java 泛型学习" Java 泛型是 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的...
Java 泛型使用详细分析 Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...