Java泛型和基类
我有以下课程:
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
}
}
现在我有以下编译错误:
The method createOrUpdate(T, User) in the type BaseDaoImpl<T> is not applicable for the arguments (BaseEntity, User)
我做错了什么,为什么createOrUpdate
方法不接受BaseEntity
对象,以及如何修复它
# 1 楼答案
改变
到
我假设
BaseDao<T>.findBaseEntityById()
具有返回类型T
。如果没有,它应该!:-)# 2 楼答案
您希望您的“T扩展BaseEntity”涵盖BaseEntity,并且它可以在您将“T”作为参数的任何位置传递。我的朋友,运气不太好。请回顾您对泛型的理解
# 3 楼答案
问题是,
T
不一定是BaseEntity
。您可以像这样实例化类BaseDaoImpl
:在这种情况下,
T
是一个Widget
,因此方法createOrUpdate(...)
变成:你不能用一个
BaseEntity
就这么说