繁体   English   中英

Java通用通配符类型不匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM