Editor-Vorlagen für defensive Programmierung

8

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%     
Daniel Hiller 17.12.2008, 12:03
quelle

2 Antworten

3

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) ).
  Wenn B ein Untertyp von A ist und A 's equals method prüft, ob das Argument ein instanceof A ist und B's equals-Methode prüft, ob das Argument instanceof 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:

  • eine Implementierung von equals, die immer die gleiche ist;
  • alle Vergleichslogiken, die nur an einem Ort liegen (die Funktion compareTo() );
  • die Übereinstimmung mit dem Javadoc von Comparable#compareTo() , um sicherzustellen, dass (x.compareTo(y)==0) == (x.equals(y)) (streng empfohlen, aber nicht unbedingt erforderlich).
VonC 17.12.2008, 12:42
quelle
2

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.

    
Markus 17.12.2008 12:33
quelle