首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >7到8之间eclipse兼容性中断中的空分析

7到8之间eclipse兼容性中断中的空分析
EN

Stack Overflow用户
提问于 2014-11-20 14:15:30
回答 1查看 641关注 0票数 5

在使用Oracle java 8u25的windows 7 64位上,我在Spring套件3.6.2 (Eclipse )下遇到了nullcheck分析的奇怪行为。同一个具有java 7源代码兼容性的maven项目成功地在eclipse中找到了NPE错误,但是当我将maven中的编译版本更改为java1.8时,eclipse无法找到此错误。

我在Eclipse中的nullcheck分析配置( java ->Compiler->Error/ works > null analysis)是:包含null分析中的断言、基于真正启用注释的分析、真正的NotNull自定义注释被正确地设置为javax.validation.constraints.NotNull等等。(一切似乎都很好,因为它在java 7下工作)

我的maven pom在这里是http://pastebin.com/pF1yJSG2,正如上面提到的,当pom中的java.version为1.7NULL check工作时,当IS1.8NULL check不工作时。

示例源代码是:

代码语言:javascript
复制
package test.nullcheckbug.core;

import javax.validation.constraints.NotNull;

public class Program {

/**
 * This will fail to compile under java 7 (null analysis works in STS
 * 3.6.2). But under java 8 it does not show error in Eclipse Markers -
 * static analysis does not work ?!
 * 
 * @return null which is not allowed
 */
@NotNull
public String fail() {
    return null;
}

/**
 * Simple main.
 * 
 * @param args
 *            ignored args
 */
public static void main(String[] args) {
}
}

有谁知道哪里有问题,以及如何使nullcheck在JDK1.8兼容性下工作?

编辑: Maven似乎没有参与其中。在非maven项目上模拟的相同问题,其源代码和编译器的兼容性级别都设置为1.7。是虫子吗?

编辑2:经过更多的检查后,我发现注释中的以下差异造成了不同: java.lang.annotation.ElementType.TYPE_USE,当注释没有这一点时,在Java 8中没有检测到空检查,但是在Java 7下检测到了空检查。但是为什么呢?!为什么会有如此不同的行为?!

编辑3:经过MartinLippert的研究和我的测试,在java 7和java 8之间,nullcheck似乎发生了巨大的变化。空检测需要(从eclipse库的2.0版本中看到) java.lang.annotation.ElementType.TYPE_USE,在分析中忽略了@Target(value={METHOD、value={METHOD、ANNOTATION_TYPE、构造函数、参数})类型。所以现在的问题是:为什么在JAVA 8下的NULL分析只在新的元素类型下需要和工作呢?(我知道使用java 8可以充分利用新的语言特性,但是为什么需要破坏兼容性呢?例如,javax.validation @NotNull现在不能用作空检查注释:-())

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-26 19:31:38

对于Eclipse露娜来说,开发工作的重点是“典型”组合:

  • Java 7和声明注释
  • Java 8和类型注释

在这个版本中,Java 8和声明注释(这个问题中所要求的)的组合没有完全实现。这已经通过bug.cgi?id=435805解决了。

自M4以来,该修复在面向Eclipse的里程碑构建中可用。

OTOH,我只能鼓励使用Java 8的项目升级到类型注释,以获得更大的表现力--支持更精确的空类型检查。

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

https://stackoverflow.com/questions/27041741

复制
相关文章

相似问题

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