簡體   English   中英

Java IntelliJ IDEA序列化未使用聲明檢查錯誤

[英]Java IntelliJ IDEA Serialization UnusedDeclaration inspection error

我正在修復和清理我的學校項目,我們應該使用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);
}
}

這是引發錯誤的類之一:“永不使用方法”這兩種方法都會引發該警告。

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

我想知道是否應該標記它們或將其單獨命名或其他名稱。

提前致謝。

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

有一些API(例如readObject被序列化機制反射地調用。 但是,必須將它們聲明為private 僅從編程語言的角度來看,它是一個私有方法,永遠不會在此類中的任何其他位置引用,因此,必須未使用它。 也許這就是IntelliJ所做的。 顯然,它沒有考慮序列化的反射性。 在任何類型的靜態分析中,都必須對此進行特殊處理。

據我所知,您的代碼沒有錯。 這就是Java中序列化機制的工作方式。

可以添加某種注釋(例如@SuppressWarnings嗎?)或可以在IntelliJ中設置的選項來避免這種警告。

(您提到了“兩個方法”,但是在這里我只看到一個方法readObject 。我猜另一個方法是writeObject ,它被序列化機制稱為完全相同的方式,並且會產生相同的警告。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM