1

我正在修復和清理我的學校項目,我們應該使用IntelliJ IDEA中的「InspectCode」功能。我們將在返回項目之前修復所有警告。我在「聲明冗餘/未使用的聲明」類別下收到了一些警告,這是警告類別定義:Java IntelliJ IDEA序列化未使用聲明檢查錯誤

「此檢查報告指定檢查作用域中未使用或無法從入口點到達的類,方法或字段。 「

我不明白爲什麼,我總共有四個警告與我的序列化代碼相關(請參閱下面的代碼),該項目工作正常,沒有錯誤,我正在尋求幫助以瞭解和希望能夠刪除這四個警告

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); 
} 
} 

這是一個類t帽子引發錯誤:「方法從不使用」 兩種方法都會引發該警告。

正如我之前說的一切正常。我知道這兩個方法正在被調用,因爲我已經測試過去除它們,並且還在System.out.println(anytexthere)中進行了調用。

我不知道我是否應該標記他們或稱他們單獨或別的東西。

在此先感謝。

回答

2

這是Java序列化機制的工作方式。

有一些API,比如readObject,這些API被序列化機制反射地調用。但是,它們被要求聲明爲private。從編程語言的角度來看,它是一種私有方法,它在這個類中從來沒有被引用過,因此它必須是未使用的。也許這就是IntelliJ正在做的事情。它顯然沒有考慮到序列化的反思性質。這在任何靜態分析中都必須是特殊的。

就我所見,你的代碼沒有問題。這就是序列化機制在Java中的工作原理。

可能會添加某種可以添加的註釋(如@SuppressWarnings?)或可以在IntelliJ中設置的選項以避免此類警告。 (你提到「兩種方法」,但我在這裏只看到一種方法,readObject。我推測另一種方法是writeObject,它被序列化機制稱爲完全相同的方式,並且會導致相同種類的警告)