我想在我的课程中使用构造函数重载,我也想要定义一些最终变量。
我想要的结构是:
public class MyClass{
private final int variable;
public MyClass(){
/* some code and
other final variable declaration */
variable = 0;
}
public MyClass(int value){
this();
variable = value;
}
}
我想调用 this()以避免在我的第一个构造函数中重写代码,但我已经定义了最终变量,因此这会产生编译错误。 我想到的最方便的解决方案是避免使用final关键字,但当然这是最糟糕的解决方案。
在多个构造函数中定义变量并避免代码重复的最佳方法是什么?
答案 0 :(得分:2)
你快到了。重写构造函数,使默认构造函数调用值为0的重载构造函数。
if (_PS_MODE_DEV_) {
Tools::error_log('ERROR: PREG_BACKTRACK_LIMIT_ERROR in function packJSinHTML');
}
答案 1 :(得分:0)
如果您的数字变量较小,则可以使用Telescoping Constructor模式
我的课() { ... }
MyClass(int value1){...}
Pizza(int value1,int value2,int value3){...}
If there is multiple variable and instead of using method overloading you can use builder pattern so you can make all variable final and will build object gradually.
public class Employee {
private final int id;
private final String name;
private Employee(String name) {
super();
this.id = generateId();
this.name = name;
}
private int generateId() {
// Generate an id with some mechanism
int id = 0;
return id;
}
static public class Builder {
private int id;
private String name;
public Builder() {
}
public Builder name(String name) {
this.name = name;
return this;
}
public Employee build() {
Employee emp = new Employee(name);
return emp;
}
}
}
答案 2 :(得分:0)
您不能在两个构造函数中分配final
变量。如果你想保留final
变量并且想要通过构造函数进行设置,那么你可以使用一个构造函数来设置最终变量,并且还包括类所需的公共代码功能。然后从另一个构造函数(如this(*finalVariableValue*);