1

我正在修复和清理我的学校项目,我们应该使用 IntelliJ IDEA 中的“InspectCode”功能。我们将在返回项目之前修复所有警告。我在“声明冗余/未使用声明”类别下收到了一些警告。这是警告类别定义:

“此检查报告指定检查范围内未使用或无法从入口点访问的类、方法或字段。”

我不明白为什么。我总共有四个与我的序列化代码相关的警告(请参见下面的代码)。该项目运行良好,我没有收到任何错误。我正在寻求帮助以了解并希望能够删除这四个警告。

private void readObject(ObjectInputStream is) throws ClassNotFoundException, IOException {
// default de-serialization
is.defaultReadObject();
quests = new ArrayList<>();

QuestManager qm = (QuestManager) is.readObject();

for (String name : qm.questNames) {
    quests.add(QuestBank.getQuest(name));
}

for (Quest q : quests) {
    System.out.println("Quest name: " + q.name);
}
}

这是引发错误的类之一:“从未使用方法”这两种方法都会引发该警告。

正如我之前所说,一切正常。我知道这两种方法被调用了,因为我已经测试过删除它们并且 att System.out.println(anytexthere) 并且被调用了。

我想知道我是否应该标记它们或单独调用它们或其他什么。

提前致谢。

4

1 回答 1

2

这就是 Java 序列化机制的工作方式。

有一些 APIreadObject被序列化机制反射调用。但是,它们需要被声明private。仅从编程语言的角度来看,它是一个私有方法,在此类中的任何其他地方都不会引用,因此,它必须是未使用的。也许这就是 IntelliJ 正在做的事情。它显然没有考虑到序列化的反射性质。这在任何类型的静态分析中都必须是特殊情况。

据我所知,您的代码没有任何问题。这就是 Java 中序列化机制的工作原理。

可能会添加某种注释(例如@SuppressWarnings?)或可以在 IntelliJ 中设置的选项以避免这种警告。

(您提到了“两种方法”,但我在这里只看到一种方法,readObject我认为另一种方法是writeObject,它被序列化机制以完全相同的方式调用,并且会导致相同类型的警告。)

于 2014-09-02T23:30:28.790 回答