Я читал прекрасный FAQ по Java Generics от Анжелики Лангер, когда прочитал этот пример исходного кода. что я не могу понять:
import java.util.List;
import java.util.ArrayList;
import java.lang.Number;
import java.lang.String;
import java.lang.Long;
class X<T extends List<? extends Number>> {
public void someMethod(T t) {
t.add(new Long(0L)); // error
Number n = t.remove(0);
}
}
Я не могу понять, почему компилятор не может сделать вывод, что «Long extends Number» и сопоставить это с «? extends Number» перед стиранием типа, что делает <? extends Number>
совершенно бесполезным.
Я уже прочитал FAQ, поэтому ищу более простое объяснение, а также альтернативы, пожалуйста.
заранее спасибо
List<Integer>
. Было бы нормально, если бы компилятор позволил вам поместить в него Long? Здесь вы добавляете небольшое число, но что, если вы попытаетесь добавить число, превышающее max int? - person Pshemo   schedule 13.08.2017