你给的两个方法在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下面任何子类。
|