【发布时间】:2021-11-08 13:57:52
【问题描述】:
我希望在我的 Java 代码中收到警告,其中“if”语句基于非原始布尔条件。
例如:
void anyMethod() {
if(getCondition()) {
...
}
}
Boolean getCondition() {
...
}
getCondition() 可能返回 TRUE、FALSE 或 null
这种“if”控件可能会产生 NullPointerException,应该避免。
在 IntelliJ 中,我尝试创建自定义检查模式,但我的不起作用。 如果我在 getCondition() 上明确放置 @Nullable 注释,则默认检查工作,但此解决方案仍然依赖于可能未严格完成的手动任务(将 @Nullable 放置在方法返回布尔值的任何地方)并且不涵盖代码条件是一个局部布尔变量。
如何编写 IntelliJ 检查模式来跟踪此案例?
非常感谢。
【问题讨论】:
-
getCondition 首先返回一个装箱的布尔值的原因是什么?
-
getCondition() 在需要的数据不可用时可能会返回 null。当它是具有可选属性的类的一部分时,它可能会发生。
-
我认为这是一个糟糕的设计。如果数据不存在,则条件可能应该默认(真或假,这是你最清楚的)。或者,如果某些东西确实应该存在但不存在,那么应该抛出异常。但是我不会依赖一个装箱的布尔值,当找到 null 时,你希望函数的调用者做什么是你首先应该在函数方面做什么。
-
如果“可选属性”是这里的用例,我宁愿使用
Optional<Boolean>而不是Boolean可能是null。 -
感谢您的回复。我知道代码可能会更好(@MC Emperor 提出的可能是正确的方法),但我的意思不是挑战编写返回布尔值的方法的可能性,而是找到一种方法来跟踪 '在 'if' 语句中使用布尔值的不良做法发生在现有代码中。
标签: java intellij-idea