2015-07-15 22 views
8

Sto analizzando il progetto Java SE 7 di SonarQube versione 5.1.Il campo di enum deve essere serializzabile?

Quindi, ho affrontato squid:S1948 nel seguente codice.

Campi in una classe "Serializable" È necessario che siano transitori o serializable

campi in una classe Serializable devono essi stessi essere o Serializable o transitoria, anche se la classe non è mai esplicitamente serializzato o deserializzato. Questo perché sotto carico, la maggior parte delle strutture applicative J2EE scaricano oggetti su disco e un oggetto presumibilmente serializzabile con membri di dati non transitori e non serializzabili possono causare arresti anomali del programma e aprire la porta agli aggressori.

enum ShutterSpeed { 
    private final Rational value; // Make "value" transient or serializable. 
    ... 
} 

penso che tutti i campi enum non verranno serializzati in J2SE 5,0 (Serialization of Enum Constants)

Si tratta di un falso positivo?

Codice completo e numero sono here.

risposta

7

In realtà è un falso positivo. Il Serialization of Enum Constants (che ci hai fornito un link a) dice che:

costanti Enum vengono serializzati in modo diverso rispetto ordinarie serializzabili o Externalizable oggetti. La forma serializzata di una costante enum consiste esclusivamente del suo nome; i valori di campo della costante non sono presenti nel modulo.

come la vedo io, non ha senso per contrassegnare Enum s' i valori dei campi come transient o renderli implementare Serializable, dal momento che sarà mai ottenere serializzato, non importa se sono contrassegnati come transient o attuare Serializable.

Se questo strumento di analisi ti costringe a fare una di queste due cose, allora scriverai codice inutile. Se fossi in te, proverei a disattivare questo avviso per enum s.

0

Vorrei semplicemente contrassegnare il campo come transitorio.

Problemi correlati