可以创建一个“仅用于参数”的对象吗?例如:
class MyClass {
public String a;
public Number b;
public MyClass(Object params) {
this.a = params.a !== null ? params.a : "default";
this.b = params.b !== null ? params.b : 0;
}
}
void main() {
MyClass myclass1 = new MyClass(new Object() {
String a = "hey";
});
MyClass myclass2 = new MyClass(new Object() {
Number b = 123;
});
MyClass myclass3 = new MyClass(new Object() {
String a = "!!!";
Number b = 5;
});
}
显然这段代码不起作用,我尝试了很多方法尝试复制它,也许使用模板(通用)?
预期结果是:
myclass1.a == "hey";
myclass1.b == 0;
myclass2.a == "default";
myclass2.b == 123;
myclass3.a == "!!!";
myclass3.b == 5;
最佳答案
您可以使用 Builder pattern创建所需的实例:
public final class MyClass {
private final String str;
private final Number number;
public static Builder builder() {
return new Builder();
}
private MyClass(Builder builder) {
str = builder.str;
number = builder.number;
}
public String getStr() {
return str;
}
public Number getNumber() {
return number;
}
public static final class Builder {
private String str = "default";
private Number number = 0;
private Builder() {
}
public MyClass build() {
return new MyClass(this);
}
public Builder str(String str) {
this.str = str;
return this;
}
public Builder number(Number number) {
this.number = number;
return this;
}
}
}
<小时/>
演示:
public static void main(String... args) {
MyClass myclass1 = MyClass.builder().str("hey").build();
MyClass myclass2 = MyClass.builder().number(123).build();
MyClass myclass3 = MyClass.builder().str("!!!").number(5).build();
}
<小时/>
如果您不想使用Builder pattern ,您可以使用类覆盖:
public class MyClass {
public String getStr() {
return "default";
}
public Number getNumber() {
return 0;
}
}
public static void main(String... args) throws IOException {
MyClass myclass1 = new MyClass() {
@Override
public String getStr() {
return "hey";
}
};
MyClass myclass2 = new MyClass() {
@Override
public String getStr() {
return "hey";
}
@Override
public Number getNumber() {
return 123;
}
};
MyClass myclass3 = new MyClass() {
@Override
public String getStr() {
return "!!!";
}
@Override
public Number getNumber() {
return 5;
}
};
}
关于Java仅通过一个对象发送类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60388683/