Ich habe eine Eigenschaft auf einer Klasse, die von einem Typ ist List<List<Value>>
, und ich versuche es mit einer Klasse zu instanziiert, die ein Subtyp dieser Schnittstellen und Klassen ist, etwa so:Wie verschachtelte Generika richtig implementiert werden?
public List<List<Value>> rows = new DbRowList<MyRow>();
Wo DbRowList
ist eine Art, die ArrayList
erstreckt:
public class DbRowList<E extends List<Value>> extends ArrayList<E> implements List<E> {
public boolean add(E element) {
MyRow row = new MyRow();
return super.add(row); // Compile-time error
}
}
und MyRow
ist:
public class MyRow extends ArrayList<Value> implements List<Value> {
public Table table;
}
Und doch wird dies nicht wegen der Fehler in der return-Anweisung von DbRowList.add()
kompilieren:
The method add(E) in the type ArrayList<E> is not applicable for the arguments (MyRow)
Warum ist es nicht anwendbar? MyRow
erstreckt sich ArrayList<Value>
, die selbst eine List
ist.