问题标签 [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.
eclipse - 在eclipse中使用jsr305注解的findbugs没有发现bug
我一直在试验与 Findbugs 一起使用的 jsr 305 注释,特别是 @CheckForNull 注释,它可以避免我刚刚发现向客户发布的错误。我已将 jsr305.jar 和 annotations.jar 添加到我的构建路径中,但 findbugs 没有发现这些错误。我正在使用带有 Eclipse Findbugs 插件的 Eclipse。下面是一些示例代码,它显示了相同的错误,但是当我在它上面运行 findbugs 时没有找到错误。我已经在 Eclipse Galileo 和 Ganymede 中尝试过。
java - JSR305 与 JSR308(Java 类型注释)——哪个将成为标准?
注释似乎有两种不同的 JSR。
JSR-305:软件缺陷检测注释 (附加资源)
JSR-308:Java 类型注释 (附加资源)
两者似乎都面向静态代码分析。
你知道吗:
- 两者中的哪一个将在 Java SE 7 或 Java EE 6 中使用?
- 每个 JSR 有多“稳定”?
- 一个取代(或过时)另一个?
java - Findbugs + JSR305:指定默认行为的可能性?
注意:我所说的那些注释是由 JSR305 指定的。
我有最新的 Findbugs (1.3.9), 当某些用 @Nonnull 注释的字段被分配为 null 时,它会正确发现错误。
但是,在我的项目中,“非空逻辑”是默认情况。我会说 null 仅在 5% 的情况下被明确允许。
因此,用@Nonnull 注释 95% 的字段会非常不方便。我宁愿用 @Nullable 注释这 5% 的字段。
我试图用@Nonnull 注释整个包,它不会改变任何东西。
那么,以某种方式可以指定默认逻辑吗?
java - JSR 305 的状态如何?
我已经看到了JSR305 与 JSR308(Java 类型注释)的问题——哪个将成为标准?我了解JSR 308和JSR 305之间的区别。
我也明白,这个时候,Java 7 是 308,而 305 不是,我很好奇 305 的整体状态。
具体来说,我在我的一些项目中使用Google Collections和JSR-305(以类似于Guice 最佳实践倡导者之一的方式)并且想知道我是否应该使用更“未来方向”友好的方法反而。我还打算在 JSR-305 小组上询问这个问题,但该小组没有太多活动,我只是想知道这里是否有人有更多信息。
java - 在 Eclipse 中自动生成知道 @NonNull 注释的 equals 和 hashCode
有没有办法将 Eclipse 配置为自动生成hashCode
并equals
意识到@NonNull
注释?目前,我的 Eclipse 生成带有不必要null
检查的代码,即使在标记为@NonNull
.
请注意,FindBugs 会发出警告,指出这些空检查是多余的。当然我们可以添加
@edu.umd.cs.findbugs.annotations.SuppressWarnings("RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")
到方法中,但这似乎首先破坏了 FindBugs 的作用@NonNull
。
在我看来,最好的解决方案是让 Eclipse 了解 JSR 305 并生成equals
并hashCode
相应地生成而不null
进行检查(如果它们仍然存在null
,那么就让它NullPointerException
自然抛出,因为发生了合同违规)。
除此之外,有一种方法来自定义Eclipse 生成equals
的hashCode
模板也很好。
相关问题
java - @ParametersAreNonnullByDefault 是否也适用于方法返回值?
的文档@ParametersAreNonnullByDefault
说:
此注解可应用于包、类或方法,以指示该元素中的方法参数默认为非空,除非...
我不认为方法的返回类型/值是它的参数。它只是其签名的一部分,所以这对我来说有点模棱两可。
方法的Java 教程似乎和我一样思考。
正如Joachim Sauer在他的回答的评论部分中为我指出的那样,名称@ParametersAreNonnullByDefault
(参数)应该已经清楚地向我表明该注释不适用于方法的返回类型/值。我瞎了!:) 谢谢约阿希姆!
鉴于此,我只能说一个@EverythingIsNonnullByDefault
应该存在于某处。:)
java - 是否有用于检查 @Nonnull 和 @Nullable 注释的好 Eclipse 插件?
在 Eclipse 中检查 @Nonnull 和 @Nullable 注释是一个早期的 beta 版本。最大的问题是它不知道 Java API 的空行为。
目前还有其他更好的插件吗?
java - 我可以根据 jsr-305 注释对方法参数进行运行时验证吗?
虽然 JSR-305 是关于代码的静态分析。它的运行时对应物还没有准备好。在我的问题之后,我想问一下是否有合适的注释处理器可以根据这些参数的注释检测方法参数不正确?
=== 编辑 ===
我真正在寻找的不是模型验证(模型 = bean 集合),而是更像方面编织的东西,我可以无缝集成到我的测试套件中。
java - 如何表示成员字段默认为@Nonnull?
我的问题是对这个问题的跟进。
在过去的 FindBugs 版本中,可以使用@DefaultAnnotation(Nonnull.class)
或@DefaultAnnotationForFields(Nonnull.class)
指示包中的所有字段都应视为@Nonnull
. 在当前版本的 FindBugs (2.0) 中,@DefaultAnnotation
并@DefaultAnnotationForFields
已弃用,我们都应该使用 JSR-305 来代替。但 JSR-305 似乎并未涵盖(现已弃用)FindBugs 注释所涵盖的所有内容。
javadoc确实提出了一些替代方案:
@ParametersAreNonnullByDefault
. 这(显然)仅适用于参数,不适用于成员字段。@CheckReturnValue
, 当应用于类型或包时。同样,这不适用于成员字段。@TypeQualifierDefault
. 也许这可以做我想做的事,但我不明白它是如何工作的,除了一些神秘的 javadoc 之外,我找不到任何关于其用法或意图的文档或示例。我认为它会帮助我创建自己的注释,但我能确定所有工具(FindBugs、Eclipse 等)都能正确解释这个新注释(甚至根本不解释)吗?
javadoc没有提供任何关于如何处理其弃用的提示。
那么,使用当前版本的 FindBugs 和/或 JSR-305,我应该如何指示某个包(甚至某个类)中的所有成员字段都应该被视为@Nonnull
?甚至可能吗?