黑马程序员技术交流社区
标题:
泛型中2条语句的区别?
[打印本页]
作者:
淡淡柠檬茶
时间:
2014-6-5 09:29
标题:
泛型中2条语句的区别?
本帖最后由 淡淡柠檬茶 于 2014-6-5 13:02 编辑
public static void printC0ll(ArrayList<?> al)
{
Iterator<?> it = d.iterator();
}
public static <T>void printC0ll(ArrayList<T> al)
{
Iterator<T> it = d.iterator();
}
作者:
李小然
时间:
2014-6-5 12:15
你给的两个方法在JVM看来是一样的
T指的是泛型的固定类型
?是一个通配符,不extends的话,就代表Object下面所有子类
他们仅在很小的地方有差异
例如
class ObjectGen<T extends Object> {
private T x;
public ObjectGen(T x) {
this.x = x;
}
}
public class TestGeneric
{
public static void main(String[] args)
{
String st = "";
//可编译
ObjectGen<String> obj1 = new ObjectGen<String>(st);
//不可编译
ObjectGen<T extends Object> obj2 = new ObjectGen<String>(st);
//可编译
ObjectGen<? extends Object> obj3 = new ObjectGen<String>(st);
}
}
obj1 可编译是因为,T被指定为具体的类型,可通过。
obj2不可编译是因为,T无法被接受,报错信息:T无法被解析为一个type。
obj3可编译是因为,?不是固定类型,它可以接受Object下面任何子类。
作者:
淡淡柠檬茶
时间:
2014-6-5 13:01
李小然 发表于 2014-6-5 12:15
你给的两个方法在JVM看来是一样的
T指的是泛型的固定类型
谢谢 我记住了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2