Ich kann keine Lösung für mein Problem finden. In beiden Fällen bekomme ich einen Kompilierfehler. Irgendwelche Hilfe, damit es funktioniert?Kompilierfehler mit verschachtelten Generika und Vererbung
Fall 1:
public class Entity<T extends EntityHandler<Entity>> {
protected T handler;
public void remove() {
for (Entity entity : handler.getEntities()) {
// do stuff
}
handler.saveEntity(this);
}
}
public class Player<T extends PlayerHandler<Player>> extends Entity</*error here*/T> {}
public class EntityHandler<T extends Entity> {
private List<T> entities;
public void saveEntity(T entity) {
// do stuff
}
public List<T> getEntities() {
return entities;
}
}
public class PlayerHandler<T extends Player> extends EntityHandler<T> {}
Fehler: Typargument T nicht innerhalb der Grenzen des Typ-Variable T
Fall 2:
public class Entity<T extends EntityHandler<? extends Entity>> {
protected T handler;
public void remove() {
for (Entity entity : handler.getEntities()) {
// do stuff
}
handler.saveEntity(/*error here*/this);
}
}
public class Player<T extends PlayerHandler<? extends Player>> extends Entity<T> {}
public class EntityHandler<T extends Entity> {
private List<T> entities;
public void saveEntity(T entity) {
// do stuff
}
public List<T> getEntities() {
return entities;
}
}
public class PlayerHandler<T extends Player> extends EntityHandler<T> {}
Fehler: inkompatible Typen: Entity nicht sein kann konvertiert, um # 1 von? extends Entity
Frage: Warum wird die erweiterte for-Schleife kompiliert und es wirft keinen Kompilierungsfehler ähnlich dem obigen?
Würdest du den EntityHandler nicht generisch machen? Aber und abstrakt, das hat einen Setter für Entität? – efekctive
öffentliche Klasse Player> erweitert Entität ist wirklich eingeschränkt in der Art und Weise, wie Sie die Dinge verschieben können –
efekctive