这些通用方法之间的区别是什么?

时间:2015-08-19 09:20:00

标签: java generics

这些之间有什么区别?

public <T extends MyClass> void myMethod (ArrayList<T> list) {
}
public void myMethod (ArrayList<? extends MyClass> list) {
}

2 个答案:

答案 0 :(得分:3)

  1. <T extends MyClass>

    • 表示MyClass的{​​strong>特定子类型,称为T
    • 您实际上可以引用到方法实现中的类型T。例如,您可以将列表中的元素分配给T类型的新变量。
    • 您可以在列表中添加和删除元素。
  2. <? extends MyClass>

    • 表示MyClass整个子类型。在编译时,确切的替代是 unknown ,因此无法引用,也不能引入这种类型的新变量。
    • 您无法向列表中添加新元素(因为实际类型未知)
    • 您只能从列表中获取元素。但是,它们只能分配给MyClass类型的变量。某些特定子类型MyClass可能需要额外的缩放。

答案 1 :(得分:2)

在第一种情况下,您可以将T称为MyClass或子类的类型。

在第二种情况下,T可以是您在此方法之外定义的内容(如果您没有名为T的类型,则没有任何内容)