问题标签 [jsr305]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - @Nullable 与泛型(Eclipse)
我想给Java 8带来一个实用方法。命名的方法max
定义如下:
现在 Eclipse 显示错误:
空类型不匹配(类型注释):
null
与自由类型变量不兼容E
。
我原以为添加@Nullable
到result
应该删除错误的定义,但显然情况并非如此。即使我另外用 注释整个方法@Nullable
,错误仍然存在。
顺便说一句,我使用的是 FindBugs 的 jsr-305.jar,并已将 Eclipse 配置为javax.annotation.Nonnull
尊重javax.annotation.Nullable
. 编辑:我在 Lubuntu 上运行 Eclipse Luna 4.4.2 和 Oracle JDK 8 build 1.8.0_25-b17。
现在我的问题是:错误来自哪里?如何在保持注释和泛型类型定义的好处的同时摆脱它?
编辑:我刚刚添加了一个示例项目,其中使用了默认的 eclipse 注释,它似乎有点工作(除了在 处生成警告,result == null
因为它错误地推断出结果只能在该点为空)。所以这似乎是非默认注释类的 Eclipse 问题。我用我自己的 Eclipse 注释副本重新测试了它Nullable
,并得到了与上面相同的错误。
eclipse - Eclipse 自定义 @NonNull 注释被忽略
我想使用 Eclipse 的“null 分析”功能,但我宁愿使用 javax.annotation.Nonnull 注释而不是 org.eclipse.jdt.annotation.NonNull 注释。我似乎无法让 Eclipse 识别我配置的任何自定义注释。
我正在使用 Eclipse Luna 4.4.2。
我创建了一个仅包含以下类的新测试项目:
我的编译器设置配置为使用 javax 注释:
我的项目包含 checker-1.8.10 JAR 以提供注释。
使用这些设置,Eclipse 报告 0 个错误。
如果我选中“对空规范使用默认注释”并将我的测试类更改为使用 Eclipse 的注释,我会得到:
任何人都知道我做错了什么或者这可能是一个 Eclipse 错误吗?我还尝试了来自谷歌的 jsr305 JAR 而不是检查器,以防万一这是一个问题,但这没有帮助。
java-8 - Javadoc 链接到拆分包
使用 javadoc 工具(我通过 Maven Javadoc 插件,而不是直接使用 javadoc)时,可以-link
选择链接到外部源。现在的问题是我的项目使用了 JSR-305 注释,并且我已将 javadoc 工具配置为链接到 Java SE 8 API。
Java SE 8 API 和 JSR-305 都使用javax.annotation
,因此由于 javadoc 无法真正判断javax.annotation.Nullable
是来自 Java SE 8 还是来自 JSR-305,它可能会生成指向 Java SE 8 javadocs 的死链接,而不是正常工作的链接链接到 JSR-305 javadocs。有没有办法配置 javadoc 来解决这个问题,例如链接javax.annotation.Nullable
到 JSR-305 javadocs 和其他东西,比如javax.annotation.Resource
与 Java SE 8 API 对齐?
java - 如何将空注释应用于 API 中公开的 Java 方法?
假设我有一个具有不变量的类,即某个实例变量永远不会为空。我也想正确使用 jsr305 null 注释。该类作为 API 公开,因此我不能依靠注释来防止空值;我还需要在运行时检查 null。
将空注释应用于此类的最佳方法是什么? @javax.annotation.Nonnull
应用于构造函数的参数描述了我的意图,但随后 Eclipse 的空分析警告空检查是死代码。如有必要,我可以抑制 Eclipse 的警告,但警告让我想知道是否有更好的方法来使用注释。
编辑:我在问如何处理可能不使用空注释的客户端代码和使用空注释的代码之间的接口。
java - 创建一个 @Stub 注解,在 Java 中充当 @Deprecated
我想在 Java 中创建一个或注释@Stub
,以表明某些类仅用于测试。此外,我喜欢将这些类设为已弃用,以阻止我图书馆的用户使用它们。我喜欢在 JSR305 中做一些类似于和其他注释的东西。@Example
@Mock
@Nullable
我想出了这个:
和用例:
不幸的是,尽管使用了@TypeQualifierNickname
,它看起来就像我的@Stub
注释被 Intellij 和 javac 编译器标记为已弃用,而不是目标注释类。
有没有办法,这可以在不需要更改 javac 或 IDE 的情况下工作?
annotations - Java 9 的 JSR-305 注释替换
到目前为止,我们一直在使用 Findbugs JSR-305 注释(com.google.code.findbugs:jsr305),包括工具支持(Sonar、Eclipse、Findbugs……)在内的一切都运行良好。
然而,我们的理解是 Java 9 中的 Jigsaw 将破坏 JSR-305 注释(两个模块中的一个包是不允许的)。这在 JavaOne 2015 上得到了证实。Oracle 的理由是 JSR-305 从未发生过,JSR-250 将不得不认可这些注释。
我们正在寻找适用于 Java 8 和 Java 9 的 JSR-305 注释的替代品。如果历史可以作为指导,Java 9 GA 和 Java 8 EOL 之间的时间将相当短,我们希望修复我们的任何不兼容问题提前打码。理论上我们可以升级 JDK 的注解模块,但是在我们的工具链中这样做似乎需要做很多工作。
java - JSR305 OSGi 出口勇敢
勇敢的核心模块添加了 javax.annotation;version="[3.0.0,4)" 的导出,这会导致在 JBoss Fuse 中使用勇敢部署 OSGi 应用程序时出现问题 - 因为系统包已经导出 javax.annotation;version=" 1.0”。
想知道为什么像 findbugs(JSR305) 包这样的 devtime 依赖项会作为运行时的一部分导出?
有什么解决方法吗?我们能否不起诉 servicemix 中的 JSR 305 捆绑包以使勇敢的 OSGi 捆绑包与 karaf 等常见容器兼容?
spring - 与 Spring lang 注释和 jsr305 元注释有什么不同?
例如,org.springframework.lang.NonNull
和javax.annotation.Nonnull
。为什么 Spring 会重复工作?Spring需要做什么?
java - Java for Kotlin 中的包范围非空注释(由 Gradle 构建)
我正在尝试编写一个具有不可为空 API 的 Java 库,我希望 Kotlin 能够正确推断出这种不可为空性。根据Kotlin 的 Java interop reference ,我正在使用JSR-305注释及其@TypeQualifierDefault
来实现整个包的效果。
我使用 Gradle 4.10.2 构建它,并按照说明-Xjsr305=strict
提供给 Kotlin 编译器。然而,当我仔细检查 Kotlin 的类型时,它们被报告为平台类型,例如:
我做错了什么,我没有得到以下输出?
请注意,Spring Framework 5 有一个类似的注解,名为@NonNullApi
.
我正在使用 OpenJDK 11。
PS。我知道我可以用 注释每个方法和参数@Nonnull
,但我追求全局行为并将 Kotlin 转换List<T!>
为List<T>
.
这是MCVE:
src/main/java/sampleAnnotation/NonNullPackage.java
/li>src/main/java/foo/package-info.java
/li>src/main/java/foo/Foo.java
/li>src/main/kotlin/sampleKotlin/Main.kt
/li>构建.gradle
/li>