ClassCastException
异常。同时,代码更加简洁、健壮。interface List<T>
和 class GenTest<K,V>
,其中,T,K,V不代表值,而是表示类型。这里使用任意字母都可以。常用T表示,是Type的缩写。
泛型方法的格式:[访问权限] <泛型> 返回类型 方法名([泛型标识 参数名称]) 抛出的异常
一定要在类名后面指定类型参数的值(类型)。如:List<String> strList = new ArrayList<String>()
,Iterator<Customer> iterator = customers.iterator()
。
注意:
?
List<?>
,Map<?,?>
。List<?>
是List<String>
、List<Object>
等各种泛型List
的父类。List<?>
的对象list
中的元素时,永远是安全的,因为不管list
的真实类型是什么,它包含的都是Object
。
list
中的元素时,不行。因为我们不知道其中的元素类型,我们不能向其中添加对象。唯一的例外是null
,它是所有类型的成员。
Collection<?> c = new ArrayList<String>()
;执行c.add(new Object())
会发生编译时错误。因为我们不知道c的元素类型,故传给add的任何参数都必须是一个未知类型的子类。因为不知道那是什么类型,所以无法传任何东西进去。<? extends Number>
, (无穷小 , Number
],只允许泛型为Number
及Number
子类的引用调用。<? extends Comparable>
只允许泛型为实现Comparable接口的实现类的引用调用。<? super Number>
[Number
, 无穷大)只允许泛型为Number
及Number
父类的引用调用。<E1,E2,E3>
。public GenericClass(){}
。而下面是错误的:public GenericClass<E>(){}
。ArrayList<String>
和ArrayList<Integer>
是两种类型,相互赋值会导致报错。Object
处理,但不等价于Object
。图片文件夹 images/images0