Java泛型 - 返回通用后继列表

时间:2014-09-18 10:19:32

标签: java generics extends

之间的区别是什么?
public static <T extends MyObj> ArrayList<T> generateRandomList(int count);

public static ArrayList<? extends MyObj> generateRandomList(int count);

因为他们表现得不同。

第一个选项无法编译以下行

ArrayList<MyObjSuccessor> myObj = Util.generateRandomList(2);

第二个选项导致我的编译调用。

1 个答案:

答案 0 :(得分:1)

假设MyObjSuccessor extends MyObj ...

  • 由于类型擦除,显示的第二方法(使用参数化通配符)的调用将无法编译,除非您将调用转换为ArrayList<MyObjSuccessor>(风险自负)。
  • 这两种方法也不能在同一Util类中共存,因为它们具有相同的签名。