wake-up-neo.com

Java: Wie kann ein Konstruktor einen Wert zurückgeben?

$ cat Const.Java 
public class Const {
    String Const(String hello) {
        return hello; 
 }
 public static void main(String[] args) {
     System.out.println(new Const("Hello!"));
 }
}
$ javac Const.Java 
Const.Java:7: cannot find symbol
symbol  : constructor Const(Java.lang.String)
location: class Const
  System.out.println(new Const("Hello!"));
                     ^
1 error
15
hhh

Was Sie definiert haben, ist eigentlich kein Konstruktor, sondern eine Methode namens Const. Wenn Sie Ihren Code in so etwas geändert haben, würde es funktionieren:

Const c = new Const();
System.out.println( c.Const( "Hello!" ) );

Wenn kein bestimmter Konstruktor explizit definiert ist, erstellt der Compiler automatisch einen Konstruktor ohne Argumente.

24
Ash

Konstruktoren können keinen Wert zurückgeben. Sie geben das konstruierte Objekt sozusagen zurück.

Sie erhalten einen Fehler, weil der Compiler nach einem Konstruktor sucht, der eine Zeichenfolge als Argument verwendet. Da Sie not einen Konstruktor deklariert haben, ist der einzige verfügbare Konstruktor der Standardkonstruktor, der kein Argument benötigt.

Warum sage ich, dass Sie keinen Konstruktor deklariert haben? Denn sobald Sie einen Rückgabewert typ für Ihre Methode angeben, handelt es sich nicht mehr um einen Konstruktor, sondern um eine reguläre Methode.

Aus der/- Java-Dokumentation :

Eine Klasse enthält Konstruktoren, die .__ sind. wird aufgerufen, um Objekte aus der .__ zu erstellen. Klasse Blaupause. Konstrukteur Deklarationen sehen aus wie Methode Deklarationen - außer, dass sie die .__ verwenden. Name der Klasse und keine Rückgabe Art.

Wenn Sie genau definieren, was Sie erreichen wollen, kann Ihnen jemand sagen, wie Sie dieses Ziel erreichen können.

22
scherand

Eigentlich kann Constructor in einer Java-Klasse keinen Wert zurückgeben, der in der folgenden Form vorliegen muss

public class Test {
 public Test(/*here the params*/) {
   //this is a constructor
   //just make some operations when you want to create an object of this class
 }
}

Überprüfen Sie diese Links http://leepoint.net/notes-Java/oop/constructors/constructor.htmlhttp://Java.Sun.com/docs/books/tutorial/ Java/JavaOO/Konstruktoren.html

9
Mohammad Kotb

Ein Konstruktor kann keinen Wert zurückgeben, da ein Konstruktor implizit die Referenz-ID eines Objekts zurückgibt und da ein Konstruktor auch eine Methode ist und eine Methode nur einen Wert zurückgeben kann. Wir sagen also explizit, dass Konstruktor keinen Rückgabewert hat.

5

Viele tolle Antworten schon. Ich möchte nur hinzufügen, dass Sie den Konstruktor in einen factory method einschließen können, wenn Sie vom Objekt selbst einen Rückgabewert erhalten möchten, der sich aus dem Objekt selbst ergibt, der beispielsweise bei der Erstellung einige Datenvalidierungen innerhalb des Objekts ausführen könnte das konstruierte Objekt und gibt abhängig vom Ergebnis eine boolean zurück.

2
amphibient

Der Konstruktor kann keinen Wert zurückgeben. Das ist endgültig. Es ist der gleiche Sinn - es kann keinen Rückgabetyp geben, und deshalb wird der Kompilierungsfehler angezeigt. Sie können sagen, dass der Rückgabewert immer implizit das vom Konstruktor erstellte Objekt ist.

1
Bozhidar Batsov

Ein Konstruktor kann keinen Rückgabewert wie eine "normale" Funktion haben. Sie wird aufgerufen, wenn eine Instanz der betreffenden Klasse erstellt wird .. _. Sie wird verwendet, um die Initialisierung dieser Instanz durchzuführen.

1
Venemo

Ich denke, der beste Weg, um den gewünschten Effekt zu erzielen, wäre folgender:

public class Const {

    private String str;

    public Const(String hello) {
        str = hello; 
    }

    public String toString() {
        return str;
    }

    public static void main(String[] args) {
        System.out.println(new Const("Hello!"));
    }
}

Dies ersetzt die public String Const()-Methode, die Sie zuvor verwendet haben. Durch Überschreiben der public String toString()-Methode von Object (von der alle Java-Klassen erben) wird der String-Wert des Objekts beim Drucken des Objekts korrekt gedruckt, sodass die Hauptmethode unverändert bleibt. 

0
Edd

Um einen Wert von einem Konstruktor zurückzugeben, übergeben Sie ein Array als Parameter .

Test() {
    Boolean[] flag = new Boolean[1];
    flag[0] = false;
    new MyClass(flag);
    System.out.println(flag[0]); // Will output 'true'
}

class MyClass {
    MyClass(Boolean[] flag) {
        // Do some work here, then set flag[0] to show the status
        flag[0] = true;
    }
}
0
Adrian Powell
/************************************************
   Put the return value as a private data member, which gets
   set in the constructor. You will need a public getter to
   retrieve the return value post construction
******************************************************/

class MyClass
{
   private Boolean boolReturnVal;

   public Boolean GetReturnVal() { return(boolReturnVal); }
   MyClass() // constructor with possibly args
    {
       //sets the return value boolReturnVal
    }

 public static void main(String args[])
 {
     MyClass myClass = new MyClass();

    if (myClass.GetReturnVal())
    {
       //success
    }

 }

}

0
Patrick
public class Const {
  private String myVar;

  public Const(String s) {
    myVar = s; 
  }

  public String getMyString()
  {
      return myVar;
  }

  public static void main(String[] args) {
    Const myConst = new Const("MyStringHere"); 
    System.out.println(myConst.getMyString());
  }
}
0
Arthur