1 /** 2 * 泛型定义 3 * 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。 4 * 5 * 泛型的规则 6 * 1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。 7 * 2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。 8 * 3、泛型的类型参数可以有多个。 9 * 4、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String"); 10 * 5、泛型有通配符上限与通配符下限,例如: 11 * (1):public class Demo<T extends Comparable & Serializable> {}。// T类型就可以用Comparable声明的方法和Seriablizable所拥有的特性了 12 * (2):还可以向上限制,如<? super Double>,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。 13 * 习惯上称为“有界类型”。 14 * 15 */
例子:
1 private static <T> T getObject(Class<T> o) throws Exception{//定义了一个泛型方法 2 T t=o.newInstance(); 3 return t; 4 } 5 6 static class Book<M>{//定义了一个泛型类 7 private M name; 8 9 public M getName() { 10 return name; 11 } 12 13 public void setName(M name) { 14 this.name = name; 15 } 16 }
1 public static void main(String[] args) throws Exception { 2 Book<String> b=new Book<String>(); 3 b.setName("a"); 4 Book<Integer> b1=new Book<Integer>(); 5 b1.setName(2); 6 System.out.println(b.getName()); 7 System.out.println(b.getClass()==b1.getClass()); 8 9 }
运行结果为true.
泛型常见什么T、K、V、E这种符号是参数的形式参数,自己也可以定义成什么M、N之类的。符号?使用是在当我们类型不能确定时使用,也就是通配符。
要多学习。。。。。。