web-dev-qa-db-ja.com

Java:コンストラクタはどのようにして値を返すことができますか?

$ 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
16
hhh

定義したのは、実際にはコンストラクタではなく、Constというメソッドです。コードを次のように変更した場合、機能します。

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

特定のコンストラクターが明示的に定義されていない場合、コンパイラーは引数のないコンストラクターを自動的に作成します。

27
Ash

コンストラクタは値を返すことができません。いわば、構築されたオブジェクトを返します。

コンパイラが文字列を引数として取るコンストラクタを探しているため、エラーが発生します。 notコンストラクタを宣言したため、使用できるコンストラクタは、引数を取らないデフォルトのコンストラクタのみです。

コンストラクタを宣言しなかったと言うのはなぜですか?メソッドの戻り値/型を宣言するとすぐに、コンストラクタではなく通常のメソッドになるためです。

Java Documentation から:

クラスには、クラスブループリントからオブジェクトを作成するために呼び出されるコンストラクターが含まれます。コンストラクターの宣言はメソッドの宣言に似ていますが、クラスの名前を使用し、戻り値の型がない点が異なります。

あなたが達成しようとしていることを詳しく説明すると、誰かがその目標にどのように到達できるかを教えてくれるかもしれません。

24
scherand

実際にJavaクラスのコンストラクタは値を返すことができません。次の形式でなければなりません

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
 }
}

これらのリンクを確認してください http://leepoint.net/notes-Java/oop/constructors/constructor.htmlhttp://Java.Sun.com/docs/books/tutorial/Java /javaOO/constructors.html

9
Mohammad Kotb

コンストラクタは暗黙的にオブジェクトの参照IDを返すため、またコンストラクタはメソッドでもあり、メソッドは複数の値を返すことができないため、コンストラクタは値を返すことができません。したがって、明示的にコンストラクタには戻り値がないと言います。

5

すでに多くの素晴らしい答え。これを追加したいのですが、コンストラクターを呼び出した結果としてオブジェクト自体とは別の戻りコードを取得したい場合は、コンストラクターをfactory methodでラップすることができます。構築されたオブジェクト内の一部のデータ検証と、結果に応じてbooleanを返します。

2
amphibient

コンストラクタは値を返すことができません。それが最後です。それは同じ意味です。戻り値の型を持つことはできません。そのため、コンパイルエラーが発生します。戻り値は常に、暗黙的にコンストラクタによって作成されたオブジェクトであると言えます。

1
Bozhidar Batsov

コンストラクタは、「通常の」関数のような戻り値を持つことはできません。問題のクラスのインスタンスが作成されるときに呼び出されます。そのインスタンスの初期化を実行するために使用されます。

1
Venemo
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());
  }
}
1
Arthur

あなたが望む効果を生み出す最良の方法は次のようになると思います:

_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!"));
    }
}
_

これは、以前に使用したpublic String Const()メソッドを置き換え、Objectpublic String toString()メソッドをオーバーライドすることで(すべてのJavaクラスは、 )オブジェクトを印刷するときにオブジェクトの文字列値が正しく印刷されるため、メインメソッドは変更されません。

0
Edd

コンストラクタから値を返すには、配列をパラメータとして渡すだけです。原理を説明するには:

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