У меня есть интерфейс Int1
. У меня есть класс Cls1
, реализующий Int1
. И общий класс Cls2<Cls1>
.Литье подтипа типа, определенного как общий
Сейчас я пишу метод:
private void <T extends Int1> test(Cls2<Cls1> arg1) {
...
//I try to cast a Cls2<Cls1> into a Cls2<Int1>: it works
Cls2<Int1> test1 = (Cls2<Int1>) arg1;
//I try to cast a Cls2<Cls1> into a Cls2<T>: doesn't work
Cls2<T> test2 = (Cls2<T>) arg1; //compilation error
}
Учитывая, что T
расширяет Int1
, что случилось с этим кодом?
«он работает», потому что он избыточен: вам не нужно вводить тип в себя. –
«ошибка компиляции», потому что 'T' не всегда' Cls1'; он * может * быть 'Cls1', но он также может быть подклассом. –
В чем смысл создания метода (добавление ''), когда 'T' не используется в сигнатуре метода. –
Andreas