Kürzlich habe ich an FindBugs-Warnungen zum Freigeben des internen Zustands gearbeitet, d. h. wenn ein Verweis auf ein Array zurückgegeben wurde, anstatt eine Kopie des Arrays zurückzugeben. Ich habe einige Vorlagen erstellt, um die Konvertierung dieses Codes zu vereinfachen.
Welche hast du erstellt, um defensive Programmierung zu unterstützen und mit der SO-Crowd teilen zu wollen?
Vorlagen, die ich bisher erstellt habe (als Beispiele):
So erstellen Sie eine Kopie eines Arrays, das von einer Methode zurückgegeben werden soll:
%Vor%Um ein Objekt zu klonen:
%Vor%Ich mag es, als Vorlage eine "sicherere" equals () Definition zu haben:
%Vor% Um sicher zu sein, immer zu vermeiden Eq: equals Methode überschreibt Gleichheitszeichen in Superklasse und möglicherweise nicht symmetrisch ( EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC
), wobei:
Diese Klasse definiert eine equals-Methode, die eine equals-Methode in einer übergeordneten Klasse überschreibt. Beide equals-Methoden verwenden instanceof, um zu bestimmen, ob zwei Objekte gleich sind.
Dies ist mit Gefahren verbunden, da es wichtig ist, dass die equals-Methode symmetrisch ist (mit anderen Worten
a.equals(b) == b.equals(a)
).
WennB
ein Untertyp vonA
ist undA
's equals method prüft, ob das Argument eininstanceof A
ist und B's equals-Methode prüft, ob das Argumentinstanceof B
ist, ist es sehr wahrscheinlich, dass Die durch diese Methoden definierte Äquivalenzbeziehung ist nicht symmetrisch.
Dies ist nur für Klassen, die Comparable
implementieren und ermöglicht:
compareTo()
); Comparable#compareTo()
, um sicherzustellen, dass (x.compareTo(y)==0) == (x.equals(y))
(streng empfohlen, aber nicht unbedingt erforderlich). Keine Vorlage, aber ich verwende array.clone()
anstelle von System.arraycopy()
. Ist da etwas nicht in Ordnung?
Bearbeiten: Eine Vorlage, die ich bei der Implementierung eines Decorators verwende, insbesondere für eine Schnittstelle mit vielen Methoden:
%Vor%Erzeugt eine Implementierung der aktuellen Methode, indem er den Aufruf an eine umhüllte Instanz delegiert und somit Kopier- / Einfügefehler verhindert.
Tags und Links eclipse java templates defensive-programming