编辑前的问题:如何在类B和C中委托类A的过多成员变量的初始化过程并仍然使用类A中的值? 注意:( B类和C类存在于A类中)
主要目标是减少A类中存在的过多成员变量。 我正在关注这篇文章中的内容[1]:https://stackoverflow.com/a/16994754/2018343
代码就像是 的更新:
public class A{ // start of class A
public int a;
int b;
public int c;
int d;
int x;
int g;
B bObject; //instance of class B
C cObject; //instance of class B
A(){ /**Constructor*/
bObject = new B(3,4);
cObject = new C(5,6);
} /*
*There is an error in eclipse after this closing bracket
*"Syntax error on token "}", { expected after this token"
*/
/**
* My end goal: I need to Use the initialized variables after the constructor
*/
public void yui(){
if(true){ // variables a and c
// System.out.println("A is greater");
x=a;
g=c;
}
} /**
* Syntax error on token "}", { expected after this token */
if(x<g){ // variables x and g
System.out.println("A is greater");
}
class B{ //Note: This class is inside class A
B(int val1, int val2){
a=val1;
b=val2;
}
}
class C{ // //Note: This class is inside class A
C(int val3,int val4){
c= val3;
d= val4;
}
}
public static void main(String[] args){
A a = new A();
a.yui();
}
} // end of class A
我真的在寻找将太多变量的初始化过程委托给其他子类,而主要是在master类的后续代码行中使用该初始化变量值。 寻求你的帮助!
答案 0 :(得分:1)
您可以使用Builder pattern使初始化更加用户友好。
一个很好的例子来自here:
public class User {
private final String firstName; // required
private final String lastName; // required
private final int age; // optional
private final String phone; // optional
private final String address; // optional
private User(UserBuilder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.phone = builder.phone;
this.address = builder.address;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public String getPhone() {
return phone;
}
public String getAddress() {
return address;
}
public static class UserBuilder {
private final String firstName;
private final String lastName;
private int age;
private String phone;
private String address;
public UserBuilder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder phone(String phone) {
this.phone = phone;
return this;
}
public UserBuilder address(String address) {
this.address = address;
return this;
}
public User build() {
return new User(this);
}
}
}
以及如何使用它:
public User getUser() {
return new
User.UserBuilder("Jhon", "Doe")
.age(30)
.phone("1234567")
.address("Fake address 1234")
.build();
}