Ключевое слово 'this' с круглыми скобками, которые получают параметры в Java 'this (param1, param2)'.Можно ли его использовать в сеттерах? - PullRequest
0 голосов
/ 11 июня 2018

Java позволяет суммировать this.classVar = parameter; this.classVar2 = parameter2; выражений до this(parameter, parameter2).По крайней мере, используется в конструкторе.Но этот код не работает, когда я перехожу с первого способа (прокомментированного в коде) на последний способ в установщике:

class Client {
    String nombre, apellidos, residencia;
    double comision;
    void setClient(String nombre, String apellidos, String residencia, double comision){
        this(nombre, apellidos, residencia, comision);
        //this.nombre = nombre;
        //this.apellidos = apellidos;
        //this.residencia = residencia;
        //this.comision = comision; 
    }
}

Ошибка говорит:

"call to this must be first statement in the constructor. 

Constructor in class Client cannot be applied to given types.

required: no arguments
<p>found: String, String, String, double
<p>reason: actual and formal argument list differ in length" (I haven't created one, just left the default). 

Так, этот способ использования 'this' действителен только для конструкторов и поэтому не подходит для сеттеров?Требуется ли явно кодировать конструктор (если да, то почему?)?

Ответы [ 3 ]

0 голосов
/ 11 июня 2018
this(/* zero or more args */);

Это вызов конструктора.Вы можете использовать его из одного конструктора для ссылки на другой (из-за отсутствия лучшего имени ' цепочка конструктора ').

Вы не можете сделать то же самое из обычного метода.Если вы хотите создать объект из обычного метода, используйте тот же синтаксис, что и для внешнего пользователя класса:

new MyClass(/* args */);

Из вашего кода это не похоже наэто подход, который вы бы хотели использовать.

0 голосов
/ 11 июня 2018

Java позволяет суммировать this.classVar = parameter; this.classVar2 = parameter2; выражения до this(parameter, parameter2).

Нет, это не так.Вы все еще должны где-то кодировать this.classVar = parameter; this.classVar2 = parameter2;.Все, что делает this(parameter, parameter2), - это вызывает конструктор (который должен иметь код this.classVar = parameter; this.classVar2 = parameter2;, если эти параметры должны быть записаны в эти поля).

Вы не можете вызвать конструктор изсеттер.Вы можете вызвать конструктор только из конструктора.Он используется для консолидации логики в одном конструкторе, даже если у вас есть более одного с различными параметрами, например:

public MyContainer(int size) {
    this.size = size;
}
public MyContainer() {
    this(16);
}

Там версия конструктора MyContainer с нулевыми параметрами вызывает однопараметрический параметрверсия, передавая 16 для параметра size.

0 голосов
/ 11 июня 2018

this(nombre, apellidos, residencia, comision) ничего не суммирует.

Это просто способ вызова другого конструктора в классе из конструктора.

Нет способа "обобщить" что-либо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...