web-dev-qa-db-ja.com

「this()」メソッドとはどういう意味ですか?

このコードブロックにぶつかりましたが、この1行があり、意味やそれが何をしているのか理解するのをやめません。

_public Digraph(In in) {
    this(in.readInt()); 
    int E = in.readInt();
    for (int i = 0; i < E; i++) {
        int v = in.readInt();
        int w = in.readInt();
        addEdge(v, w); 
    }
}
_

this.method()または_this.variable_が何であるか理解していますが、this()とは何ですか?

43
Sugihara

これはコンストラクタのオーバーロードです。

_public class Diagraph {

    public Diagraph(int n) {
       // Constructor code
    }


    public Digraph(In in) {
      this(in.readInt()); // Calls the constructor above. 
      int E = in.readInt();
      for (int i = 0; i < E; i++) {
         int v = in.readInt();
         int w = in.readInt();
         addEdge(v, w); 
      }
   }
}
_

このコードは、戻り値型がないため、メソッドではなくコンストラクターであることがわかります。これは、拡張クラスを初期化するために、コンストラクターの最初の行でsuper()を呼び出すことによく似ています。コンストラクタの最初の行でthis()(またはthis()のその他のオーバーロード)を呼び出して、コンストラクタコードの重複を避ける必要があります。

この投稿もご覧ください: Constructor overloading in Java-ベストプラクティス

54
Avi

This()をそのような関数として使用すると、基本的にクラスのコンストラクターが呼び出されます。これにより、1つのコンストラクターですべての汎用初期化を行い、他のコンストラクターで特殊化を行うことができます。したがって、たとえばこのコードでは、this(in.readInt())の呼び出しは、1つのint引数を持つDigraphコンストラクターを呼び出しています。

10
Sinkingpoint

このコードスニペットはコンストラクタです。

thisへのこの呼び出しは、同じクラスの別のコンストラクターを呼び出します

_public App(int input) {
}

public App(String input) {
    this(Integer.parseInt(input));
}
_

上記の例では、intを受け取るコンストラクタとStringを受け取るコンストラクタがあります。 Stringを受け取るコンストラクターは、Stringintに変換し、intコンストラクターに委任します。

別のコンストラクターまたはスーパークラスコンストラクター(super())の呼び出しは、コンストラクターの最初の行である必要があることに注意してください。

コンストラクタのオーバーロードの詳細については、 this をご覧ください。

9

ほぼ同じです

public class Test {
    public Test(int i) { /*construct*/ }

    public Test(int i, String s){ this(i);  /*construct*/ }

}
4
Antimony

Intパラメーターを持つDigraphクラスの他のコンストラクター。

Digraph(int param) { /*  */ }
3

thisを呼び出すと、基本的にクラスConstructorが呼び出されます。たとえば、add(JComponent)と一緒に何かを拡張する場合は、次のようにします。this.add(JComponent).

3
user2228462

this();は、クラス内の別のコンストラクターを呼び出すために使用されるコンストラクターです。たとえば:

_class A{
  public A(int,int)
   { this(1.3,2.7);-->this will call default constructor
    //code
   }
 public A()
   {
     //code
   }
 public A(float,float)
   { this();-->this will call default type constructor
    //code
   }
}
_

注:デッドロック状態につながるため、デフォルトコンストラクターでthis()コンストラクターを使用しませんでした。

これがあなたを助けることを願っています:)

2
user27

コンストラクターのオーバーロード:

例:

public class Test{

    Test(){
        this(10);  // calling constructor with one parameter 
        System.out.println("This is Default Constructor");
    }

    Test(int number1){
        this(10,20);   // calling constructor with two parameter
        System.out.println("This is Parametrized Constructor with one argument "+number1);
    }

    Test(int number1,int number2){
        System.out.println("This is Parametrized  Constructor  with two argument"+number1+" , "+number2);
    }


    public static void main(String args[]){
        Test t = new Test();
        // first default constructor,then constructor with 1 parameter , then constructor with 2 parameters will be called 
    }

}
2
LMK