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());