Вопрос, приведенный ниже, взят из книги Java SCJP5 Кэти Сьерра и Берт Бейтс.
Данный метод объявлен как:
public static <E extends Number> List<E> process(List<E> nums)
Программист хочет использовать такой метод:
// INSERT DECLARATIONS HERE
output = process(input);
Какую пару объявлений можно поместить в // ВСТАВИТЬ ДЕКЛАРАЦИИ ЗДЕСЬ, чтобы позволить скомпилировать код? (Выберите все подходящие варианты.)
A.
ArrayList<Integer> input = null;
ArrayList<Integer> output = null;
B.
ArrayList<Integer> input = null;
List<Integer> output = null;
С
ArrayList<Integer> input = null;
List<Number> output = null;
D.
List<Number> input = null;
ArrayList<Integer> output = null;
Е.
List<Number> input = null;
List<Number> output = null;
F.
List<Integer> input = null;
List<Integer> output = null;
G. Ничего из перечисленного.
Правильные ответы даны: B, E, F и объяснение в книге гласит:
«Тип возврата определенно объявлен как List, а не ArrayList, поэтому A, D ошибаются. ......»
Это то, что я не понимаю ... почему тип возвращаемого значения ДОЛЖЕН быть только List, а не ArrayList ?? Так же, как аргумент может быть ArrayList, тогда почему возвращаемый тип также не может быть arrayList?
Спасибо