checker framework argument.type.incompatible意外的正数

jjjwad0x  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(467)

所以我从空值检查程序得到这个错误

> Task :compileJava
/Users/calebcushing/IdeaProjects/ppm/scaf/src/main/java/com/xenoterracide/scaf/PebbleTemplateProcessor.java:94: error: [argument.type.incompatible] incompatible argument for parameter obj of requireNonNull.
        var console = Objects.requireNonNull( System.console() );
                                                            ^                                     ^

这是在抱怨 System.console() 可以为null,读取javadoc时为true。所以我把它包起来 Objects.requireNonNull() 现在它在抱怨 requireNonNull 不能为空,这显然不是真的。
我该怎么说 NullnessChecker 忽略 Objects.requireNonNull() ? 我对npe的很好,它是明确的,只是那些我不想要的偶然的。我相信checker已经提供了这个的存根。

7kqas0il

7kqas0il1#

编辑:下面的答案是为原来的帖子写的,里面有3个不相关的问题(我不知道为什么这个答案被否决了,因为它准确地回答了所有3个问题,并提供了更多信息的链接。
请每个帖子问一个问题。
第一个是抱怨 System.console() 可以为null,读取javadoc时为true。所以我把它包起来 Objects.requireNonNull() 现在它在抱怨 requireNonNull 不能为空,这显然不是真的。
这在checker框架手册的简介中得到了回答。
空值检查器的目标是在程序可能抛出错误时向您发出警告 NullPointerException . 如果这个论点 requireNonNull()null ,然后程序抛出 NullPointerException . 因此,通过 nullrequireNonNull() 让你的程序不比通过更正确 null 对于任何其他可能取消引用它的例程,空值检查器会对此发出警告。
你试图通过写信来平息警告 requireNonNull() . 如上所述,这没有任何效果:程序仍然抛出 NullPointerException . 相反,最好是纠正根本问题。您的程序应该检查null并发出一条用户友好的消息,而不是崩溃——不管崩溃是在您自己的代码中还是在 requireNonNull() .
第二个是抱怨commons-lang3参数不能取null,但是它的文档却不这么说。
checker框架手册的简介中也回答了这一问题。
空值检查器读取注解,而不是英语javadoc注解。为了让零度检验者知道 toBoolean() 可以接受空参数,其签名为 toBoolean() 需要注解为:

boolean toBoolean(@Nullable Boolean bool)

如手册中所述,您可以编写该注解,以便空值检查器使用它。您还可以将commons lang注解贡献给社区,以便其他人也可以从中受益。
我补充了警告,不知道为什么它还在发生。
你需要写信 @SuppressWarnings 发出警告的地方,是在 Application 班级。你写的 @SuppressWarnings 在你程序的另一行。

相关问题