Java 为什么IntelliJ IDEA认为我的布尔方法总是颠倒的,而事实并非如此?
我不熟悉使用IntelliJ Idea,我有以下代码:Java 为什么IntelliJ IDEA认为我的布尔方法总是颠倒的,而事实并非如此?,java,intellij-idea,Java,Intellij Idea,我不熟悉使用IntelliJ Idea,我有以下代码: private boolean verifyToken(TokenTypeEnum expectedTokenType, Token token) { return token != null && token.getTokenType() == expectedTokenType && token.getExpiryDate().i
private boolean verifyToken(TokenTypeEnum expectedTokenType, Token token) {
return token != null &&
token.getTokenType() == expectedTokenType &&
token.getExpiryDate().isAfter(Instant.now());
}
现在IntelliJ IDEA抱怨这种布尔方法总是反向的。但是我特别编写了这个方法,所以它返回一个正的值,我不想让一个方法isInvalidToken或者类似的东西。我相信这一警告的目的实际上是为了避免像这样的负面影响
更重要的是,如果我真的让IntelliJ自动反转方法,它会使表达式变成这样,这完全不是我想要的,因为它更难推理(即使我会重写日期比较)
为什么要这样做?当然,我可以禁用警告,但我不想禁用。始终反转”意味着在调用该方法的所有地方,都会禁用!运算符应用于调用表达式。IntelliJ IDEA不知道从语义的角度来说这是困难还是容易推理;它只是执行语法分析。如果您认为反转该方法会使代码更难理解,只需抑制对该方法的检查。我有一个用例,每当紧急情况激活时,我需要一个视图(android项目) 我将此视图称为紧急视图:
公共类EmergencyView扩展了RelativeLayout{
私有布尔紧急活动;
...
公共布尔值isEmergencyActive(){
返回紧急激活状态;
}
}
在这个用例中,我得到了getter的BooleanMethodIsAlwaysInverted
警告。如果我将getter方法的名称更改为isEmergency
,警告就会消失,因此这里检查的不仅仅是代码的语义
最初,我使用@SuppressWarnings(“BooleanMethodIsAlwaysInverted”)
来隐藏此警告,但最终我决定将字段的名称更改为emergency
问题仍然是,“紧急激活”还是简单的“紧急”是描述名为
EmergencyView
的视图功能状态的最佳方式,但我不再收到此警告,也不必抑制它。ohhh这就是它的意思。是的,该方法在调用方法时用作“快速退出”,类似于if(x==null)return之类的保护。哦,好吧……你们怎么阻止这次检查?我在IDE的灯泡菜单下看不到它,也找不到/猜不到SuppressWarning的神奇字符串。@SuppressWarnings(“BooleanMethodIsAlwaysInverted”)
private boolean newNegativeMethod(TokenTypeEnum expectedTokenType, Token token) {
return token == null ||
token.getTokenType() != expectedTokenType ||
!token.getExpiryDate().isAfter(Instant.now());
}