Ich habe eine Schnittstelle A wie folgt aus:mit Java Generics
public interface A{
void myFirstMethod();
void mySecondMethod();
}
Und dann habe ich diese Klasse:
public class MyClass{
private List<? extends A> elements;
public MyClass(){
A obj = new A(){
@Override
public void myFirstMethod(){
//SOME CODE
}
@Override
public void mySecondMethod(){
//SOME CODE
}
};
elements.add(obj);
}
}
ich nicht Generika vor (nur Dinge wie List<String>...
) verwenden haben, damit ich kann nicht sehen, warum dieser Code nicht kompiliert. Um genau zu sein, bekomme ich einen Fehler in der Zeile elements.add(obj);
, dass die Methode hinzufügen für diese Parameter nicht anwendbar ist.
EDIT: Ich habe den Code geändert und jetzt die Elemente.add (Obj) kompiliert gut, aber ich habe ein anderes Problem.
public class MyClass{
private List<A> elements;
public MyClass(List<A> elements){
this.elements = elements;
elements.add(obj);
}
}
Wenn ich dies versuche, kompiliert es nicht.
//A1 implements A
List<A1> list = new ArrayList<A1>();
MyClass(list);
Wie könnte ich das beheben?
Mit anderen Worten: '?' Bedeutet "unbekannt", nicht "any". –
Das ist richtig; Die Schreibweise "Liste extends A>" bedeutet, dass es sich um eine "Liste" eines ** spezifischen ** aber ** unbekannten ** Typs handelt. Es bedeutet ** nicht **, dass die Liste eine Mischung verschiedener Objekttypen enthalten kann, die "A" erweitern; es bedeutet, dass die Liste Objekte eines bestimmten Typs enthält, die "A" erweitern, aber Sie wissen nicht, was der tatsächliche Typ ist. – Jesper
@Jesper Ich habe deine Formulierung geklaut, die sehr klar ist ;-) – assylias