Betrachten Sie das folgende Stück Code:Warum Superklassen generischer Typ nicht gelöscht/gegossene
class A<T>{
T t;
public T getValue(){
return t;
}
class B<S extends Number> extends A<String>{
//some code here..
}
B b = new B<Integer>();
String name = b.getValue() // This throws compilation error
während der folgenden Werke:
B<Integer> b = new B<Integer>();
String name = b.getValue() // This works...!
Also meine Fragen sind:
Muss ich alle beteiligten Generika angeben? (Obwohl der generische Typ der Klasse A in Klasse B deklariert wurde.)
Oder fehlt mir im Grunde etwas?
Sie den entscheidenden Teil weggelassen haben, die die Deklaration von 'B.getValue ist()'. –
Between, warum sollte ich die Methode in B überschreiben, wenn ich kein Verhalten von getValue() ändern möchte? Außerdem wurde der A-Typ in B als Long deklariert, um ihn zu löschen. –
@JimGarrison aber die Deklaration für 'getValue' ist in der Klasse' A' – SomeJavaGuy