【问题标题】:Why does IntelliJ sometimes throw an unused warning but sometimes not?为什么 IntelliJ 有时会抛出未使用的警告,但有时不会?
【发布时间】:2021-07-27 06:39:33
【问题描述】:

我有许多带有两个构造函数的 Java 类:

  1. 一个不带参数的私有构造函数,并且由 gson 调用且具有未使用的警告抑制;
  2. 带参数的公共构造函数。

在一个类中,IntelliJ 警告我从未使用过公共构造函数。在所有其他类中都没有警告,但是如果我单击 Find Usage 方法,它会显示“Nothing found in project files”。

为什么在某些情况下会出现警告而在其他情况下却没有?如何让 IntelliJ 始终以相同的方式运行?

这是公共构造函数抛出警告的类:

public class ShopMarketAction extends Action {

    private Boolean inRow = null;
    private Integer index = null;

    @SuppressWarnings("unused") // Called by gson
    private ShopMarketAction() {
        super(ActionType.SHOP_MARKET);
    }

    // THIS METHOD THROWS AN UNUSED WARNING
    public ShopMarketAction(boolean inRow, int index) {
        super(ActionType.SHOP_MARKET);
        this.inRow = inRow;
        this.index = index;
    }

}

这是一个公共构造函数不抛出警告的示例类:

public class ProductionAction extends Action {

    private Integer cardIndex = null;

    @SuppressWarnings("unused") // Called by gson
    private ProductionAction() {
        super(ActionType.PRODUCE);
    }

    // THIS METHOD DOESN'T THROW THE WARNING BUT IS NEVER USED
    public ProductionAction(int cardIndex) {
        super(ActionType.PRODUCE);
        this.cardIndex = cardIndex;
    }

}

我指定在这两个类中还没有使用该方法。

两个类都扩展的 Action 类:

public abstract class Action {

    @SuppressWarnings({"unused", "FieldCanBeLocal"})
    private final ActionType type; // Used by gson

    protected Action(ActionType type) {
        this.type = type;
    }

}

ActionType 枚举:

public enum ActionType {
    SHOP_MARKET, PRODUCE;
}

【问题讨论】:

  • 您忘记包含相关类。
  • 公共成员可以被任何人访问,对吧?因此,如果成员是公共的,我们不能断定该成员未被使用,因为单独编译的代码可能会访问该成员,对吗? 大部分是的,但是如果类本身是私有嵌套类,那么只有当前编译单元中的代码可以访问它,所以成员并不是真正的“公共”。
  • 我编辑了问题并添加了两个示例类。
  • 两个类都是公共的并且在同一个包中
  • 我已经复制了你的整个示例,但恐怕我仍然会在两个构造函数上收到未使用的警告。

标签: java intellij-idea warnings


【解决方案1】:

我找到了导致问题的原因:我有一个非 Java 文件(由另一个应用程序创建的 UXF 文件),其中包含所有这些方法的名称,并且由于某种原因 IntelliJ 认为它们已被使用。

【讨论】:

  • 如果您认为这是一个错误,请在youtrack.jetbrains.com/issue 提出问题。谢谢
  • @OlgaKlisho 好的,谢谢,但我不知道这是否是一个错误
  • 如果您将说明案例的小代码示例附加到问题中,我们将进行调查 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多