1

학교 프로젝트를 수정 및 정리하고 IntelliJ IDEA의 "InspectCode"기능을 사용해야합니다. 프로젝트를 반환하기 전에 모든 경고를 수정해야합니다.Java IntelliJ IDEA Serialization UnusedDeclaration 검사 오류

"이 검사는 사용되지 않았거나 진입 점에서 도달 할 수없는 지정된 검사 범위의 클래스, 메소드 또는 필드를보고합니다. 경고 범주 정의는 다음과 같습니다. "

필자는 왜 직렬화 코드 (아래 코드 참조)에 연결된 총 네 가지 경고가 있습니다. 프로젝트가 제대로 작동하고 오류가 발생하지 않습니다. 이해하는 데 도움을 요청하고 있습니다. 이 4 가지 경고를 제거 할 수 있기를 바랍니다.

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 클래스 중 하나입니다. hat가 오류를 발생시킵니다. "방법이 사용되지 않습니다." 두 방법 모두 해당 경고를 발생시킵니다.

모든 것이 작동하기 전에 말했듯이. 나는이 두 메소드가 호출되고 있다는 것을 알고있다. 왜냐하면 나는 그것들을 제거하기 위해 테스트했고 System.out.println (anytexthere)에 att를 호출했기 때문에 호출된다.

내가 그들을 표시하거나 별도로 또는 다른 전화를 해야하는지 궁금해.

미리 감사드립니다.

답변

2

이것은 Java 직렬화 메커니즘이 작동하는 방식입니다.

readObject과 같은 일부 API가 직렬화 메커니즘에 반영됩니다. 그러나 그들은 private으로 선언해야합니다. 프로그래밍 언어의 관점에서 보았을 때,이 클래스 내에서 결코 참조되지 않는 private 메소드이므로 사용하지 않아야합니다. 아마도 이것이 IntelliJ가하는 일일 것입니다. 분명히 직렬화의 성격을 고려하지 않고 있습니다. 이것은 어떤 종류의 정적 분석에서도 특별해야 할 것입니다.

내가 알 수있는 한 귀하의 코드에는 아무런 문제가 없습니다. 이것은 Java에서 직렬화 메커니즘이 작동하는 방법입니다.

이러한 종류의 경고를 피하기 위해 IntelliJ에서 설정할 수있는 주석 (예 : @SuppressWarnings?) 또는 옵션을 추가 할 수 있습니다.

("두 가지 방법"에 대해서는 언급했지만 여기서는 하나의 방법 만 보았습니다. readObject입니다. 다른 방법은 writeObject이라고 가정합니다.이 방법은 직렬화 메커니즘과 완전히 동일한 방식으로 호출되며 동일한 경고가 발생합니다 .)