Ich analysiere Java SE 7 Projekt von SonarQube Version 5.1.
Dann habe ich squid:S1948
auf den unteren Code gesetzt.
%Vor%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.
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 .
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.