public class HelloWorld{
public static void main(String[] args) {
List<? extends Number> callback = new ArrayList<Long>();
new Container<>().test(callback);
}
public static class Container<T extends Number> {
public void test(List<T> some) {
}
}
}Дженерики - несовместимые типы
этот код производит
HelloWorld.java:7: error: incompatible types: List<CAP#1> cannot be converted to List<Number>
new Container<>().test(callback);
^
where CAP#1 is a fresh type-variable:
CAP#1 extends Number from capture of ? extends Number
Можете ли вы объяснить в деталях этот код неверен.
Я ожидаю, что новый контейнер будет обобщен с типом, совместимым с обратным вызовом
Несколько бессмысленно, так как 'String' является' final' классом. – Bohemian
@Bohemian представьте, что это номер – gstackoverflow
В этом случае используйте 'Number', так как есть веские причины использовать' Number' в generics, но не очень много для 'String'. – Makoto