Ich habe eine Schnittstelle Int1
. Ich habe eine Klasse Cls1
Implementierung Int1
. Und eine generische Klasse Cls2<Cls1>
.Umwandlung eines Untertyps in einen als generischen Typ definierten Typ
Jetzt schreibe ich eine Methode:
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
}
Bedenkt man, dass T
erstreckt Int1
, was mit diesem Code falsch?
"Es funktioniert", weil es redundant ist: Sie müssen keinen Typ für sich selbst darstellen. –
"Kompilierungsfehler", weil 'T' nicht immer' Cls1' ist; Es könnte * Cls1 sein, aber es könnte auch eine Unterklasse davon sein. –
Worauf kommt es an, die Methode generisch zu machen ( '), wenn" T "nicht in der Methodensignatur verwendet wird. –
Andreas