что это() ? это может иметь несколько параметров? - PullRequest
0 голосов
/ 03 марта 2011

Я обнаружил код, в котором метод this () в java принимает три параметра, два из которых являются целыми числами, а третий - логическим значением. Что именно это означает ? Есть ли другие варианты метода this ()? Гера это фактический код.

 public SegmentConstructor(int seqNum_, int length_) {
        this(seqNum_, length_, false);
    }

Спасибо ..

Ответы [ 6 ]

10 голосов
/ 03 марта 2011

Это означает, что в текущем классе есть другой конструктор с такой подписью.

public SegmentConstructor(int seqNum_, int length_) {
    this(seqNum_, length_, false); // calls the constructor below.
}

public SegmentConstructor(int seqNum_, int length_, boolean required_) {
    seqNum = seqNum_;
    length = length_;
    required = required_;
}

Метод this - это просто способ вызова одного из конструкторов вашего класса из другого конструктора, чтобы избежать дублирования кода. Он может быть вызван только в первой строке конструктора, но ни в каком другом методе.

2 голосов
/ 03 марта 2011

this просто вызывает другой конструктор для запуска.Итак, ищите другие конструкторы с этой подписью.

1 голос
/ 03 марта 2011

Как уже было сказано выше, это вызывает другой конструктор, в основном как вспомогательный метод.

Простой пример:

class A {
 private int value;

 public A(int val) {
  value = val;
 }

 public A() {
  this(0); //0 as default
 }
}

Обычно вы используете вызовы this (), когда самый специфический конструктор (тот, который имеет наибольшее количество параметров) - это не просто присваивание, но содержит больше логики, которую вы не хотите повторять / копировать и т. д.

Только потому, что он подходит здесь: super() также может иметь параметры, т.е.это вызывает конструктор суперкласса с параметрами из конструктора подкласса.

0 голосов
/ 03 марта 2011

this () не является методом, но является зарезервированным ключевым словом, указывающим на перегруженный конструктор того же класса. Число передаваемых вами параметров должно указывать на существующий соответствующий конструктор, определенный в классе.

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

0 голосов
/ 03 марта 2011

class MyClass {private int var1;private int var2;закрытый логический флаг;

публичный MyClass (int var1_, int var2_) {this (var1_, var2_, false);}

public MyClass (int var1_, int var2_, логический флаг_) {var1 = var1_;var2 = var2_;флаг = флаг_;}

public String toString () {return (new Boolean (flag) .toString ());}

public static void main (String [] args) {MyClass my = new MyClass (5,6);System.out.println (мой);}

}

Так что работает.

0 голосов
/ 03 марта 2011

Это вызов конструктора. Если ваш класс реализует разные конструкторы с разным количеством аргументов, вы можете связать свои конструкторы следующим образом:

class A {
    public A(boolean arg) {
        ...
    }

    public A() {
        this(false); // invokes the constructor with the boolean argument
    }
}

Иногда имеет смысл создать приватный конструктор, принимающий разные аргументы, и предоставить общедоступным и / или защищенным конструкторам другие / меньшее количество аргументов и делегировать конструкцию объекта этому приватному конструктору.

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

Edit: так как this (...) вызывает конструктор, он может быть вызван только из других конструкторов (принадлежащих к тому же классу).

...