泛型
- 当方法静态时,不能访问类上定义的泛型,应该:
public static <T> void show(T obj){ } //<T>的位置不能写错地方
普通方法也可以像上面这样写。
- <?>表示通配符,在不需要对传入类型操作时使用,比较常用。
- Collection
<animal>
test = new ArrayList<Dog>
(); //不可以这样写,泛型类型不匹配。一般左右两边都得写成一样的
泛型的限定:
1.
- <? extends Animal> 表示只接收Animal和Animal的子类。 即规定了上限。
一般在存储元素时都是用上限<? extends E>, 因为这样取出都是按照上限类型来运算的,比较安全。
2.
- <? super E> 接受E类型或其父类。规定了下限。
一般在取出元素时使用,Comparator<? super Dog>。 当从TreeSet取出一个Dog()对象,可以用compare(Animal a1 , Animal a2)方法接收,提高代码复用。(用的不如 <?extends E>多)