Java 棋盘格框架参数.type.compatible不需要的正数
所以我从零度检查器得到这个错误Java 棋盘格框架参数.type.compatible不需要的正数,java,checker-framework,Java,Checker Framework,所以我从零度检查器得到这个错误 > 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.
> 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.requirennull()
中,现在它抱怨requirennull
的参数不能为null,这显然是不正确的
如何告诉
NullnessChecker
忽略对象。requirennoull()
?我对明确的NPE很好,只是我不想要的意外的。我相信checker已经为这篇文章提供了一个存根。编辑:下面的答案是为原来的文章写的,其中有3个不相关的问题。(海报后来编辑了原始帖子。)我不知道为什么这个答案被否决,因为它准确地回答了所有3个问题,并提供了更多信息的链接
请问
第一个是抱怨System.console()
可能为null,这在读取javadoc时是正确的。所以我把它包装在Objects.requirennull()
中,现在它抱怨requirennull
的参数不能为null,这显然是不正确的
这在报告中得到了回答
空值检查器的目标是在程序可能抛出NullPointerException
时向您发出警告。
如果requirennull()
的参数为null
,则程序会抛出NullPointerException
。
因此,将null
传递给requirennull()
不会使程序比将null
传递给可能取消引用它的任何其他例程更正确,并且空值检查程序会发出警告
您试图通过写入requirennoull()
来消除警告。
如上所述,这没有任何效果:程序仍然抛出NullPointerException
。
相反,最好是纠正根本问题。您的程序应该检查null并发出用户友好的消息,而不是崩溃——不管崩溃是在您自己的代码中还是在requirennoull()
中
第二个是抱怨commons-lang3参数不能接受null,但是它的文档中说不是这样
这一点在报告中也得到了回答
空值检查器读取注释,而不是英语Javadoc注释。
为了让空度检查器知道toBoolean()
可以接受空参数,其toBoolean()
的签名需要注释为:
boolean-toBoolean(@Nullable-boolean-bool)
如中所述,您可以编写该注释,以便空值检查器使用它。
您还可以将commons lang注释贡献给社区,以便其他人也可以从中受益
我添加了一些警告,不确定为什么它仍然在发生
您需要在发出警告的位置编写
@SuppressWarnings
,它位于应用程序
类的声明中。你在程序的另一行写了@SuppressWarnings
。Re:commons-lang3我知道它不读注释。。写这篇文章时我很累。在上游补丁之外,我如何解决这个问题?请参阅我在回答中链接到的。您可能需要创建一个存根文件,如此处所述。>重要链接中最相关的部分,以防外部资源无法访问或永久脱机@SuppressWarnings(“initialization.fields.uninitialize”)
我尝试将其放在构造函数和类上,但仍然遇到此错误/Users/calebcushing/IdeaProjects/ppm/scaf/src/main/java/com/xenoterracide/scaf/Application.java:24:error:[initialization.fields.uninitialized]构造函数不初始化字段:arg,args,dir Application(){^
如果要将答案部分移到此处,请将其拆分