Java泛型初识
一.泛型的使用举例:
import java.util.ArrayList; import java.util.Collection; import java.util.List; publicclass GernericTest { publicstaticvoid main(String[] args) throws Exception{ List<Integer> listInteger =new ArrayList<Integer>(); List<String> listString =new ArrayList<String>(); printCollection(listInteger); printCollection(listString); } publicstaticvoid printCollection(Collection<Object> collection){ for(Object obj:collection){ System.out.println(obj); } } }
这段代码中,会编译报错,由Collection<Object>引起。泛型的参数不考虑继承关系,或者直接说,不会自动向上转型。
修正后:
下面的方法直接改成:
public static void printCollection(Collection<?> collection){ for(Object obj:collection){ System.out.println(obj); } }
或者:
public static<E> void printCollection(Collection<E> collection){ for(E obj:collection){ System.out.println(obj); } }
二.泛型的认识:
1.自认为所谓的泛型即动态绑定类型,即java文件进行编译的时候动态的给定类型。泛型这概念在class文件中并不存在,因为已经是编译好的东东。
2.泛型可以看成一个类型参数,这个类型参数需要在方法参数传入前,提前传入。(这个举例略)
三.泛型中?,E,T的认识:
1.?是泛型中的统配符,E和T是类型参数的一个代表符号而已,也可以写成其他形式
2.类型表示的看起来比较高级的形式,拿ArrayList来举栗子:
ArrayList<? extends Father> list----------表示这个ArrayList中每个元素的类型是,Father及其Father的子类;
ArrayList<? super Father> list-------------表示这个ArrayList中的每个元素的类型是,Father及其Father的父类;
以上是对泛型的一些初步认识。泛型的好处及技巧有待实践认识。
参考:http://blog.csdn.net/lonelyroamer/article/details/7864531
http://blog.csdn.net/ikownyou/article/details/65630385
浙公网安备 33010602011771号