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'的这种方式仅对构造函数有效,因此不适合于setter吗?是否需要对构造函数进行显式编码(如果是,为什么?)?

最佳答案

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;代码)。

您不能从setter调用构造函数。您只能从构造函数中调用构造函数。即使您有多个具有不同参数的构造器,它也用于在单个构造器中合并逻辑,例如:

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


在那里,MyContainer构造函数的零参数版本将调用单参数版本,并将其传递给16作为size参数。

10-07 19:30
查看更多