<! - ?之间的区别扩展CustomClass - >和<customclass> Genericity </customclass>

时间:2013-11-20 10:11:41

标签: java list class generics design-patterns

这些列表有什么区别。

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的子类作为参数。

这两种解决方案之间有什么区别?

1 个答案:

答案 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)