[英]Java Generics Wildcards Type Mismatch
我有以下结构:
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
,您将需要显式BaseRevision
转换,因为这是一个BaseRevision
,甚至不是由以下原因引起的“安全”之一:类型消除垂头丧气:
PersonData personData = (PersonData)(personEntity.getLatestRevision().getVersionedEntityData());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.