带括号的关键字 'this' 在 Java 'this(param1,param2)' 中接收参数。它可以在二传手中使用吗?
Keyword 'this' with parenthesis that receive parameters in Java 'this(param1,param2)'. Can it be used in setters?
Java 允许将 this.classVar = parameter; this.classVar2 = parameter2;
表达式汇总为 this(parameter, parameter2)
。至少在构造函数中使用。
但是当我在 setter:
中从前一种方式(在代码中注释)更改为后一种方式时,这段代码不起作用
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
'的方式是否只对构造函数有效,因此不适合setters?是否需要显式编码构造函数(如果是,为什么?)?
this(nombre, apellidos, residencia, comision)
没有 "summarize" 任何东西。
这只是一种从构造函数调用 class 中的另一个构造函数的方法。
没办法"summarize"任何东西
this(/* zero or more args */);
这是构造函数调用。您可以在一个构造函数中使用它来引用另一个构造函数(因为缺少更好的名称,'constructor chaining')。
你不能用普通方法做同样的事情。如果您想从普通方法中创建一个对象,您可以使用与使用 class:
的外部用户相同的语法
new MyClass(/* args */);
从您的代码来看,这似乎不是您想要采用的方法。
Java allows to summarize this.classVar = parameter; this.classVar2 = parameter2;
expressions to 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
参数。
Java 允许将 this.classVar = parameter; this.classVar2 = parameter2;
表达式汇总为 this(parameter, parameter2)
。至少在构造函数中使用。
但是当我在 setter:
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
'的方式是否只对构造函数有效,因此不适合setters?是否需要显式编码构造函数(如果是,为什么?)?
this(nombre, apellidos, residencia, comision)
没有 "summarize" 任何东西。
这只是一种从构造函数调用 class 中的另一个构造函数的方法。
没办法"summarize"任何东西
this(/* zero or more args */);
这是构造函数调用。您可以在一个构造函数中使用它来引用另一个构造函数(因为缺少更好的名称,'constructor chaining')。
你不能用普通方法做同样的事情。如果您想从普通方法中创建一个对象,您可以使用与使用 class:
的外部用户相同的语法new MyClass(/* args */);
从您的代码来看,这似乎不是您想要采用的方法。
Java allows to summarize
this.classVar = parameter; this.classVar2 = parameter2;
expressions tothis(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
参数。