gpt4 book ai didi

java - 如何将@CheckForNull 等与Findbugs 一起使用?

转载 作者:行者123 更新时间:2023-11-29 08:16:53 27 4
gpt4 key购买 nike

当我通过 Findbugs 运行它时,我收到警告:

static @NonNull Object foo(@CheckForNull Object arg) {
if (arg == null) { // warning on this line
throw new NullPointerException();
}
return "something";

}

警告详情如下:

Bug: arg must be nonnull but is marked as nullable
Pattern id: NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE, type: NP, category: STYLE

This parameter is always used in a way that requires it to be nonnull, but the parameter is explicitly annotated as being Nullable. Either the use of the parameter or the annotation is wrong.

有人可以解释 Findbugs 在这里提示什么吗?

请注意,我使用的是 edu.umd.cs.findbugs.annotations.* 成员,而不是 javax.annotations.*。 (有区别吗?)

设置是 FindBugs 插件 1.3.9.2009- for Eclipse 3.6.1。


Matthew Flaschen 建议我改用@NonNull,但现在我遇到了这个问题:

static void blah(@NonNull Object arg) {
if (arg == null) {
throw new NullPointerException();
}
System.out.println(arg);
}

static @CheckForNull Object bleh() {
return null;
}

//...
blah(bleh()); // warning here!

警告的详细信息是:

Bug: Possible null pointer dereference due to return value of called method
Pattern id: NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE, type: NP, category: STYLE

The return value from a method is dereferenced without a null check, and the return value of that method is one that should generally be checked for null. This may lead to a NullPointerException when the code is executed.

我基本上希望 blah 满足 @CheckForNull 要求,但如果我将它的 arg 设为 @NonNull 我就做不到了.我如何让它发挥作用?

最佳答案

你在自相矛盾。 CheckForNull意思是,“带注释的元素可能为空”,但如果是,则立即抛出。

如果调用者永远不能接受传递 null,我相信你应该改为注释它:

static @NonNull Object foo(@NonNull Object arg) {

关于java - 如何将@CheckForNull 等与Findbugs 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com