Muss das Feld enum serialisierbar sein?

8

Ich analysiere Java SE 7 Projekt von SonarQube Version 5.1.

Dann habe ich squid:S1948 auf den unteren Code gesetzt.

  

Felder in einer "Serializable" -Klasse sollten entweder transient oder serialisierbar sein

     

Felder in einer serialisierbaren Klasse müssen selbst serialisierbar oder transient sein, auch wenn die Klasse niemals explizit serialisiert oder deserialisiert wird. Das liegt daran, dass die meisten J2EE-Anwendungsframeworks unter Last Objekte auf die Festplatte spülen, und ein angeblich serialisierbares Objekt mit nicht vorübergehenden, nicht serialisierbaren Datenelementen könnte Programmabstürze verursachen und Angreifern die Tür öffnen.

%Vor%

Ich denke, dass alle Enumerationsfelder in J2SE 5.0 ( Serialisierung von Enum-Konstanten )

Ist das ein falsch-positives?

Der gesamte Code und das Problem sind hier .

    
Hideki SHIRO 15.07.2015, 13:59
quelle

2 Antworten

7

Es ist tatsächlich falsch-positiv. Die Serialisierung von Enum-Konstanten (die Sie habe einen Link zu) sagt das:

  

Enum-Konstanten werden anders serialisiert als gewöhnliche serialisierbare   oder externalisierbare Objekte. Die serialisierte Form einer Enum-Konstante   besteht nur aus seinem Namen; Feldwerte der Konstante sind nicht   in der Form vorhanden.

Aus meiner Sicht ist es nicht sinnvoll, die Feldwerte von Enum als transient zu markieren oder sie als Serializable zu implementieren, da sie niemals serialisiert werden, egal, ob sie markiert sind als transient oder implementieren Serializable .

Wenn dieses Analyse-Tool Sie zwingt, eines dieser beiden Dinge zu tun, dann schreiben Sie nutzlosen Code. Wenn ich Sie wäre, würde ich versuchen, diese Warnung für enum s zu deaktivieren.

    
Federico Peralta Schaffner 15.07.2015, 19:51
quelle
0

Ich würde das Feld einfach als vorübergehend markieren.

    
Jidehem 15.07.2015 16:45
quelle

Tags und Links