Angesichts der folgenden Java-Code:Nested Wildcard Generika Variable Affektiertheit
public class Test {
public static class A<T> {
private T t;
public A(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public static class B<T> {
private T t;
public B(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public static class F<T> {
private T t;
public F(T t) {
this.t = t;
}
public A<B<T>> construct() {
return new A<>(new B<>(t));
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public static void main(String[] args) {
F<?> f = new F<>(0);
// 1: KO
// A<B<?>> a = f.construct();
// 2: KO
// A<B<Object>> a = f.construct();
// 3: OK
// A<?> a = f.construct();
}
}
Im Hauptverfahren der Test
Klasse, was ist der richtige Typ einer Variablen, die das Ergebnis der f.construct()
erhalten? Dieser Typ sollte etwas wie A<B<...>>
sein, wo ...
ist, was ich suche.
Es gibt 3 kommentierte Zeilen Code oben, die meine Versuche darstellen, dieses Problem zu lösen. Die ersten und zweiten Zeilen sind nicht gültig. Die dritte ist, aber ich verliere die B
Art Informationen und ich muss a.getT()
werfen.
Warum verwenden Sie 'F > f = new F <> (0);' statt, zum Beispiel 'F f = new F <> (0);' –
Tunaki
Weil 'f' wird nicht immer betroffen mit Instanzen von 'F'. –
Sie übergeben 0 als Argument. Was ist ein 'int'? – Tunaki