2014-09-18 2 views
-1

Что такое междуJava генерики - возвращающие список родового преемника

Всё различие
public static <T extends MyObj> ArrayList<T> generateRandomList(int count); 

и

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

Потому что они ведут себя diffenerently.

первый вариант не удается собрать следующую строку

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

Вторые варианты вызывает мой призыв к компиляции.

+0

Каков тип возврата Util.generateRandomList? –

+1

Какое сообщение об ошибке вы получили с первым вариантом? Это, как правило, хорошее место для начала. – Keppil

ответ

1

Предполагая MyObjSuccessor extends MyObj ...

  • Отображаемого вызов вашего второго метода (с использованием параметризованных подстановочные) не будет компилироваться, так как тип стирания, если не бросить вызов как ArrayList<MyObjSuccessor> (на своем собственном риск).
  • Также оба метода не могут совместно проживать в одном классе Util, потому что они имеют одинаковую подпись.
+0

Первый компилируется, но вы не можете поместить ничего в список. – biziclop

+0

@biziclop на самом деле мой ответ неоднозначен, спасибо, что привлек мое внимание к этому. Сейчас отредактирует. – Mena

+0

@biziclop почему ты не мог? Это список : вы можете добавить любой T, который вы хотите (т. Е. Любой MyObjSuccessor в этом случае). –

Смежные вопросы