Java泛型通配符类型不匹配
我的结构如下:Java泛型通配符类型不匹配,java,generics,type-mismatch,Java,Generics,Type Mismatch,我的结构如下: public abstract class BaseVersionedEntity { private long id; private List<BaseRevision<? extends BaseVersionedEntity>> versions; public BaseRevision<? extends BaseVersionedEntity> getLatestRevision() {
public abstract class BaseVersionedEntity {
private long id;
private List<BaseRevision<? extends BaseVersionedEntity>> versions;
public BaseRevision<? extends BaseVersionedEntity> getLatestRevision() {
return versions.get(versions.size() - 1);
}
public abstract BaseRevision<? extends BaseVersionedEntity> newRevision();
}
public abstract class BaseVersionedEntityData<E> {
private long id;
private BaseRevision<E> revision;
}
public abstract class BaseRevision<E> implements Comparable<BaseRevision<E>> {
private long id;
private Timestamp timestamp;
private E versionedEntity;
private BaseVersionedEntityData<E> versionedEntityData;
public BaseVersionedEntityData<E> getVersionedEntityData() {
return versionedEntityData;
}
}
由于某些原因,标记为类型不匹配
Type mismatch: cannot convert from BaseVersionedEntityData<capture#1-of ? extends BaseVersionedEntity> to PersonData
类型不匹配:无法从BaseVersionIdentityData转换为PersonData
有人能发现错误吗??或者有什么提示
谢谢!!
Benjamin方法
getLatestRevision
不返回PersonRevision
,它返回BaseRevision
,即使如此,PersonRevision
也不返回PersonData
-您需要显式强制转换,因为这是向下转换,甚至不是“安全”转换之一由类型擦除降级导致:
PersonData personData = (PersonData)(personEntity.getLatestRevision().getVersionedEntityData());
哦他妈的在代码前坐上几个小时会让人对简单的东西视而不见。。。无论如何谢谢你@BenjaminIhrig正在查找重写方法,因为我对它不太熟悉-您可以在
PersonEntity
中重写getLatestRevision
,以返回PersonRevision
,虽然这可能会被视为循环依赖项…baseVersionIdentity
应该有一个通用参数,您可以将PersonData
放入其中。
Type mismatch: cannot convert from BaseVersionedEntityData<capture#1-of ? extends BaseVersionedEntity> to PersonData
PersonData personData = (PersonData)(personEntity.getLatestRevision().getVersionedEntityData());