我有以下结构:
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;
}
}
这将通过以下方式实现:
public class PersonEntity extends BaseVersionedEntity {
@Override
public BaseRevision<? extends BaseVersionedEntity> newRevision() {
PersonRevision newRevision = new PersonRevision();
newRevision.setTimestamp(new Timestamp(System.currentTimeMillis()));
getRevisions().add(newRevision);
return newRevision;
}
}
public class PersonData extends BaseVersionedEntityData<PersonEntity> {
}
public class PersonRevision extends BaseRevision<PersonEntity> {
}
在我的代码中的某个地方,我将执行以下调用:
// is not null
PersonEntity personEntity;
PersonData personData = personEntity.getLatestRevision().getVersionedEntityData();
出于某些标记为类型不匹配的原因...
Type mismatch: cannot convert from BaseVersionedEntityData<capture#1-of ? extends BaseVersionedEntity> to PersonData
有人能发现错误吗?或者有什么提示吗??
谢谢!! 本杰明
最佳答案
方法 getLatestRevision
不会返回 PersonRevision
,而是返回 BaseRevision
,即使如此,PersonRevision
也不会返回不返回PersonData - 您需要显式转换,因为这是一个向下转换,甚至不是由类型删除引起的“安全”向下转换之一:
PersonData personData = (PersonData)(personEntity.getLatestRevision().getVersionedEntityData());
关于Java 泛型通配符类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13753141/