Ich habe die folgende Klasse:Java Generics und Basisklasse
public abstract class BaseDaoImpl<T extends BaseEntity> implements BaseDao<T> {
@Override
public T createOrUpdate(T t, User user) {
return createOrUpdate(t, true, user);
}
@Override
public void addOnwerUserToEntity(String entityType, Long entityId, User user) {
BaseEntity baseEntity = findBaseEntityById(entityType, entityId);
baseEntity.addOwnerUser(user);
createOrUpdate(baseEntity, user); // compilation error
}
}
jetzt habe ich folgendes Kompilierungsfehler:
The method createOrUpdate(T, User) in the type BaseDaoImpl<T> is not applicable for the arguments (BaseEntity, User)
Was mache ich falsch, warum createOrUpdate
Verfahren nicht akzeptiert BaseEntity
Objekt und wie es zu beheben?
Warum sollte ein "BaseEntity" -Wert akzeptiert werden? Sie haben mit 'createOrUpdate' ein' T' akzeptiert. –
Es ist oft einfacher zu verstehen, wenn Sie die Klassen durch konkrete Beispiele ersetzen. T = Banane. BaseEntity = Frucht. Sie definieren eine Methode createOrUpdate (Banana) und rufen sie mit einem Argument vom Typ Fruit auf. Eine Frucht ist nicht unbedingt eine Banane. Der Compiler akzeptiert den Methodenaufruf also nicht. –
Aber T wird akzeptiert, BaseEntity und Unterklassen zu akzeptieren. Im Moment verstehe ich nicht, warum BaseEntity nicht akzeptiert wird. – alexanoid