Что означает метод this()?

Я столкнулся с этим блоком кода, и есть одна строка, в которой я не могу понять смысл или что он делает.

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()?

Ответ 1

Это перегрузка конструктора:

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()) в первой строке вашего конструктора и тем самым избежать дублирования кода конструктора.

Вы также можете посмотреть этот пост: Перегрузка конструктора в Java - лучшая практика

Ответ 2

Используя эту функцию() как функцию, она по сути вызывает конструктор класса. Это позволяет использовать все общие инициализации в одном конструкторе и иметь специализации в других. Так, например, в этом фрагменте кода вызов this(in.readInt()) вызывает конструктор Digraph, который имеет один аргумент int.

Ответ 3

Этот фрагмент кода является конструктором.

Этот вызов this вызывает другой конструктор того же класса

public App(int input) {
}

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

В приведенном выше примере мы имеем конструктор, который принимает int и тот, который принимает String. Конструктор, который принимает String, преобразует String в int, а затем делегирует конструктору int.

Обратите внимание, что вызов другого конструктора или конструктора суперкласса (super()) должен быть первой строкой в ​​конструкторе.

Возможно, просмотрите этот для более подробного объяснения перегрузки конструктора.

Ответ 4

Это почти то же самое

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

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

}

Ответ 5

Другой конструктор класса Digraph с параметром int.

Digraph(int param) { /*  */ }

Ответ 6

Вызов this по существу вызывает класс Constructor. Например, если вы что-то расширяете, чем с add(JComponent), вы можете сделать: this.add(JComponent).

Ответ 7

Перегрузка конструктора:

Пример:

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 
    }

}

Ответ 8

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() в конструкторе по умолчанию, потому что это приведет к состоянию взаимоблокировки.

Надеюсь, это поможет вам:)