【问题标题】:Why does IntelliJ IDEA think my Boolean method is always inverted when it is not?为什么 IntelliJ IDEA 认为我的布尔方法总是被反转,而实际上它不是?
【发布时间】:2018-02-27 10:13:03
【问题描述】:

我是使用 IntelliJ Idea 的新手,我有以下代码:

private boolean verifyToken(TokenTypeEnum expectedTokenType, Token token) {
        return token != null &&
               token.getTokenType() == expectedTokenType &&
               token.getExpiryDate().isAfter(Instant.now());
}

现在 IntelliJ-IDEA 抱怨这个布尔方法总是被反转。但是我专门编写了这个方法,所以它返回一个肯定的,我不想制作一个方法 isInvalidToken 或类似的东西。我相信这个警告的目的实际上是为了避免诸如此类的负面影响。

更重要的是,如果我真的让 IntelliJ 自动反转该方法,它会使这样的表达式完全不是我想要的,因为它更难推理(即使我会重写日期比较)

private boolean newNegativeMethod(TokenTypeEnum expectedTokenType, Token token) {
        return token == null ||
               token.getTokenType() != expectedTokenType ||
               !token.getExpiryDate().isAfter(Instant.now());
}

为什么要这样做?我当然可以禁用警告,但我不想这样做。

【问题讨论】:

    标签: java intellij-idea


    【解决方案1】:

    “总是倒置”意味着在调用该方法的所有地方,!运算符应用于调用表达式。 IntelliJ IDEA 不知道从语义的角度来看这是难还是容易推理;它只是执行句法分析。如果您认为反转方法会使代码更难理解,只需取消对该方法的检查即可。

    【讨论】:

    • 哦,就是这个意思。是的,该方法在调用方法中用作“快速退出”,类似于 if (x == null) return 之类的守卫。哦,好吧...
    • 你如何抑制这个检查?我在 IDE 中的灯泡菜单下看不到它,也找不到/猜测 SuppressWarning 的魔法字符串。
    • @SuppressWarnings("BooleanMethodIsAlwaysInverted")
    【解决方案2】:

    我有一个用例,只要紧急情况处于活动状态,我就需要一个视图(android 项目)。

    我将此视图称为 EmergencyView:

    public class EmergencyView extends RelativeLayout {
    
       private boolean emergencyActive;
    
    ...
    
       public boolean isEmergencyActive() {
          return emergencyActive;
       }
    }
    

    在这个用例中,我的 getter 收到了 BooleanMethodIsAlwaysInverted 警告。如果我将 getter 方法的名称更改为 isEmergency,警告就会消失,因此这里需要检查的不仅仅是代码的语义。

    最初,我使用 @SuppressWarnings("BooleanMethodIsAlwaysInverted") 隐藏此警告,但最终我决定将我的字段名称更改为 emergency

    问题仍然是“紧急激活”或简单地“紧急”是描述名为EmergencyView 的视图的功能状态的最佳方式,但我不再收到此警告,也不必抑制它。

    【讨论】:

      猜你喜欢
      • 2016-10-29
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      相关资源
      最近更新 更多