1) 使用T赋值的都是为具体类型.,我们用通配符(?)代替了:
? 叫有限制的通配符, 用于赋值的类型不确定的时候。
? 叫有限制的通配符, 用于赋值的类型不确定的时候。
2) 观察如下代码:
package genericTest;
public class Parent {
}
package genericTest;
public class Child extends Parent {
}
package genericTest;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void doTest(List<? extends Parent> list) { //?表示运行时确定具体类型
}
/**
* @param args
*/
public static void main(String[] args) {
List<Parent> pList = new ArrayList<Parent>() ;
List<Child> cList = new ArrayList<Child>() ;
doTest(pList) ;
doTest(cList) ;
}
}
OK, 编译运行正常。
但如果换成如下代码:
public static void doTest(List<Parent> list) {
}则 : doTest(cList) ; 编译报错,这是因为后者编译器认为两者类型是不一致的,且在编译期间就确定了,而前者表示运行时才确定。
深入的理解推荐这位的博客: http://www.linuxidc.com/Linux/2013-10/90928.htm
本文通过对比两种不同写法的Java代码,详细解释了Java中泛型的使用方式,特别是有限制的通配符(? extends 类型)的概念,以及它如何帮助在运行时确定具体的类型。
1102

被折叠的 条评论
为什么被折叠?



