这些列表有什么区别。
ArrayList<? extends CustomClass> test = new ArrayList<CustomClass>();
ArrayList<CustomClass> test2= new ArrayList<CustomClass>();
或两者之间。
class test <T extends CustomClass> {
public void <T> someThings(T arg){}
}
class test {
public void someThings(CustomClass arg){}
}
T
正在扩展CustomClass
,因此在CustomClass
方法中使用someThings()
的子类作为参数应该有效。
但它与第二次算法完全相同,我们也可以传递CustomClass
的子类作为参数。
这两种解决方案之间有什么区别?
答案 0 :(得分:3)
如果您有子类:
public class SuperClass {
}
public class SubClass extends SuperClass {
}
然后:
List<? extends SuperClass> test1 = new ArrayList<SubClass>(); // ok
List<SuperClass> test2 = new ArrayList<SubClass>(); // ko, won't compile
发送消息Type mismatch: cannot convert from ArrayList<SubClass> to ArrayList<SuperClass>
。
参数化方法时,真正的之间没有区别:
public <T extends SuperClass> void method(T arg)
和
public void method(SuperClass arg)
在返回所述类型时参数化方法很有趣:
public <T extends SuperClass> T method(T arg)