Können wir den Lauf eines Konstruktors stoppen?

8

Ich muss ein Objekt eines bestimmten Typs erstellen. Die Klasse des Objekts hat nur einen Konstruktor (einen, den ich geschrieben habe).

Mein Programm empfängt Anforderungen zum Erstellen von Instanzen eines Objekts mit einer Parameter-ID. Ich möchte den Konstruktor stoppen, wenn der ID-Parameter ein Zeichen enthält, das keine Ziffer ist.

Ich kann den Parameter vorher nicht überprüfen, da ich nicht derjenige bin, der den Konstruktor aufruft.

    
SapG 09.03.2011, 18:48
quelle

3 Antworten

4

Wie Sie das lösen können, hängt davon ab, was Sie tun wollen, wenn ein unzulässiges Zeichen eingegeben wird, was wiederum davon abhängt, von welchem ​​Objekt wir sprechen und wie die aufnehmende Bibliothek es verwendet.

Das Vernünftigste wäre, ein IllegalArgumentException zu werfen, und das ist es, was ich dir vorschlagen würde.

Es kann jedoch auch sinnvoll sein, nur return null zu verwenden, obwohl ich dringend davon abraten würde (dies kann nicht direkt im Konstruktor geschehen, aber Sie können eine Factory-Methode erstellen, die dies tut).

    
Tomas Lycken 09.03.2011, 18:54
quelle
19

Machen Sie den Konstruktor privat und legen Sie eine statische Factory-Methode offen, die eine neue Instanz des Objekts validiert und zurückgibt, wenn der Parameter gültig ist.

    
crowne 09.03.2011 18:52
quelle
6

Die einzige Möglichkeit, einen Konstruktor zu "stoppen", ist das Auslösen einer Ausnahme. Bedenkt natürlich, dass der Aufrufer über diese Ausnahme "wissen" und in der Lage sein sollte, den Fall zu behandeln, in dem der Konstruktor fehlschlägt.

Durch das Auslösen einer Ausnahme aus dem Konstruktor wird das erstellte Objekt jedoch nicht gestoppt. Es wird lediglich die Zuweisung der Referenz auf eine Variable fehlgeschlagen und die Referenz unavailable (und daher für die Garbage Collection geeignet) es sei denn Sie machen den Fehler, this vom Konstruktor selbst an eine externe Methode zu übergeben. (Was Sie ohnehin nicht tun sollten.)

    
biziclop 09.03.2011 18:51
quelle

Tags und Links