2012-04-01 13 views
1

Ich möchte Tests in einem Konstruktor machen, um herauszufinden, ob es derzeit eine gute Idee ist, das Objekt mit den gegebenen Parametern zu instanziieren. Aber wie kann ich eine Warnung von einem Konstruktor auf die neue Anweisung abbrechen und zurückgeben? Müssen solche Tests vor jeder "neuen" Aussage vom Aufrufer durchgeführt werden? Ich dachte, der Konstrukteur wäre ein guter Platz dafür.Kann der Konstruktor die Instantiierung abbrechen?

Antwort

8

Sie könnten stattdessen ein Factory-Objekt verwenden. Dies könnte dann Ihre Prüfungen ausführen und das instansierte Objekt oder null zurückgeben. Dies wäre wahrscheinlich effizienter als eine Ausnahme.

MyObject myObject = MyObjectFactory.createMyObject(); 
+2

+1, bitte tun Sie dies, anstatt in den Konstruktor zu werfen. –

+0

Ja, eine gute Zeit, um das Fabrikmuster zu üben! – Tombola

2

Der einzig sichere Weg Objektbau abzubrechen ist eine Ausnahme vor Abschluss des Konstruktor

1

Ihr den Konstruktor eine Ausnahme auslösen, wenn die Parameter ungültig kannst zu werfen.

Wenn es nur eine Frage der Eingabegültigkeit ist, dass ein Anrufer in der Lage sein sollte, sich selbst zu überprüfen, sollten Sie eine RuntimeException werfen. Wenn es etwas ist, das ein Aufrufer nicht unbedingt steuern kann, sollte der Konstruktor eine geprüfte Ausnahme auslösen; Beachten Sie, dass dazu der gesamte Code benötigt wird, der den Konstruktor aufruft, um die Ausnahme zu behandeln oder zu deklarieren.

4

Ja, Sie werfen eine Ausnahme im Konstruktor.

in Java Sie in der Regel eine IllegalArgumentException wenn eines der Argumente falsch waren werfen, die eine gemeinsame Sache zu tun wirklich als Schutzerklärung: Ausnahmen

public class Roman { 

    public Roman(int arabic) { 

     // "Guard statement" in the beginning of the constructor that 
     // checks if the input is legal 
     if (arabic < 0) { 
      throw new IllegalArgumentException("There are no negative roman numerals"); 
     } 

     // Continue your constructor code here 

    } 

} 

Wenn Sie nicht möchten, dass Sie als GavinCatelli's answer tun können und erstellen Sie eine Factory-Methode, die null zurückgibt, wenn das Objekt nicht "korrekt" ist.

public class RomanFactory { 

    public static Roman getSafeRoman(int a) { 
     Roman r; 
     try { 
      r = new Roman(a); 
     } catch(IllegalArgumentException e) { 
      r = null; 
     } 
     return r; 
    } 

} 

Sie haben allerdings für null ist zu überprüfen, oder aber das Programm kann mit Nullpointer abstürzen.

0

Erstellen Sie Ihre eigene Klasse von Ausnahme und übergeben Sie entsprechend die Nachricht basierend auf den Parametern, die an den Konstruktor übergeben werden. Daher werfen Sie diese Ausnahme aus dem Konstruktor.

Verwandte Themen