【发布时间】:2021-07-27 06:39:33
【问题描述】:
我有许多带有两个构造函数的 Java 类:
- 一个不带参数的私有构造函数,并且由 gson 调用且具有未使用的警告抑制;
- 带参数的公共构造函数。
在一个类中,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