wie erklärt man die Rückgabeanweisung im Konstruktor?

7

Soweit ich weiß, gibt der Konstruktor nichts zurück, nicht einmal void,

und auch

%Vor%

in einer beliebigen Methode bedeutet, dass void zurückgegeben wird.

so in meinem Programm

%Vor%

Ich rufe an

%Vor%

die VOID zurückgibt, aber der Konstruktor soll nichts zurückgeben, Das Programm kompiliert einfach gut.

bitte erklären.

    
Hussain Akhtar Wahid 'Ghouri' 04.03.2013, 06:09
quelle

5 Antworten

15

return in einem Konstruktor springt nur an dem angegebenen Punkt aus dem Konstruktor heraus. Sie können es verwenden, wenn Sie die Klasse unter bestimmten Umständen nicht vollständig initialisieren müssen.

z.B.

%Vor%     
John3136 04.03.2013, 06:12
quelle
2
Mit

return kann der Konstruktor sofort verlassen werden. Ein Anwendungsfall scheint die Erstellung von halb initialisierten Objekten zu sein.

Man kann argumentieren, ob das eine gute Idee ist. Das Problem IMHO ist, dass die resultierenden Objekte schwer zu bearbeiten sind, da sie keine Invarianten haben, auf die Sie sich verlassen können.

In allen Beispielen, die ich bisher gesehen habe, die return in einem Konstruktor verwendet haben, war der Code problematisch. Oft waren die Konstruktoren zu groß und enthielten zu viel Geschäftslogik, was es schwierig machte, sie zu testen.

Ein anderes Muster, das ich gesehen habe, implementierte die Steuerlogik im Konstruktor. Wenn eine Umleitung erforderlich war, speicherte der Konstruktor die Umleitung und rief zurück. Abgesehen davon waren diese Konstruktoren auch schwer zu testen, das Hauptproblem war, dass man, wenn man mit einem solchen Objekt arbeiten muss, pessimistisch davon ausgehen muss, dass es nicht vollständig initialisiert ist.

Behalten Sie die Logik der Konstruktoren besser im Auge und streben Sie nach vollständig initialisierten, kleinen Objekten. Dann müssen Sie (wenn überhaupt) selten return in einem Konstruktor aufrufen.

    
Philipp Claßen 25.11.2013 16:36
quelle
1

Methoden, die mit void return type deklariert wurden, sowie Konstruktoren geben nur nichts zurück. Deshalb können Sie return statement überhaupt nicht angeben. Der Grund, warum der Rückgabewert void nicht für Konstruktoren angegeben ist, besteht darin, den Konstruktor von der Methode mit demselben Namen zu unterscheiden:

%Vor%     
Mikhail Vladimirov 04.03.2013 06:13
quelle
1
  

Anweisungen nach return Anweisung wäre nicht erreichbar. Wenn return-Anweisung die letzte ist, dann hat es keinen Sinn, im Konstruktor zu definieren, aber der Compiler reklamiert nicht. Es kompiliert gut.

     

Wenn Sie eine Initialisierung im Konstruktor auf der Grundlage von if Bedingung ex. durchführen, möchten Sie vielleicht die Datenbankverbindung initialisieren, wenn sie verfügbar ist, und Sie können sie beliebig zurückgeben Daten von der lokalen Festplatte für temporäre Zwecke zu lesen.

%Vor%     
AmitG 04.03.2013 13:03
quelle
1

In diesem Fall verhält sich return ähnlich wie break . Es beendet die Initialisierung. Stellen Sie sich eine Klasse mit int var vor. Sie übergeben int[] values und möchten var auf ein beliebiges positives int in values (oder var = 0 anderenfalls) initialisieren. Dann können Sie return verwenden.

%Vor%     
Stepan 20.04.2017 20:21
quelle

Tags und Links