Java泛型(Generic)理解之一:T和?的区别

来源:互联网 发布:jpg转换成pdf mac 编辑:程序博客网 时间:2024/05/21 11:28
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

0 0
原创粉丝点击