首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带泛型的java类层次结构中的不兼容空约束

带泛型的java类层次结构中的不兼容空约束
EN

Stack Overflow用户
提问于 2016-01-15 17:26:29
回答 1查看 128关注 0票数 2

我正在将一个项目的java代码库从java7迁移到java8。在此过程中,我还将从javax.annotation @Nullable、@NonNull和@ParametersAreNotNullByDefault注释切换到org.eclipse.jdt注释,以便在eclipse中进行空分析(Mars版本4.5.0:Build id: 20150621-1200)。在这样做的过程中,我偶然发现我无法编译(因为基于注释的null检查方面的严格eclipse设置),因为我无法解释一些事情。我并不是想找到一种编译代码的方法,而是更多地了解错误发生的原因。

包中有以下类,它们使用@NonNullByDefaultpackage-info.java中指定默认的非空性。

我有一个由抽象类实现的接口,然后由一个具体的类进行扩展,如下所示:

代码语言:javascript
运行
复制
public interface SimulationComponent {

    <T extends SimulationComponent> List<T> getCorrectSimulationSubComponents();

    List<? extends SimulationComponent> getErroneousSimulationSubComponents();
}


public abstract class AbstractSimulationComponent
        implements SimulationComponent {

    @Override
    public List<SimulationComponent> getCorrectSimulationSubComponents() {
        return Collections.emptyList();
    }

    @Override
    public List<SimulationComponent> getErroneousSimulationSubComponents() {
        return Collections.emptyList();
    }
}

public class ConcreteSubSimComponent extends AbstractSimulationComponent {
    public void doSomething() {
    }
}

Eclipse通知我ConcreteSubSimComponent中的以下问题:

代码语言:javascript
运行
复制
The method @NonNull List<@NonNull SimulationComponent> getErroneousSimulationSubComponents() from 
 AbstractSimulationComponent cannot implement the corresponding method from SimulationComponent due 
 to incompatible nullness constraints

这个问题似乎是由getErroneousSimulationSubComponents()中的泛型通配符引起的。这就是我如何指定导致我在迁移到java8时注意到问题的方法。我发现,只要将这个方法签名替换为getCorrectSimulationSubComponents()中显示的签名,我就可以“轻松”地修复问题。我不明白为什么上一个版本起作用,而上一个版本却不行。

而且,这似乎只是具体子类中的一个问题。直接实现接口的具体类不显示任何问题。

我使用的是JavaSE-1.8,在https://github.com/KrisC369/NullProblemIllustration中可以找到一个具有未编译代码的示例项目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-18 19:29:31

很明显,这个错误已经通过针对JDT修复bug 436091而引入的更改得到了解决。此修复应该出现在EclipseMars.2 (4.5.2)和EclipseNeon-M4 (4.6.0-M4)中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34816561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档