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