[英]IntelliJ IDEA @SuppressWarnings for inspection with name of tool
[英]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.