如何在方法外部访问类A的成员变量,该变量已在其他类中实例化?

时间:2015-10-07 01:22:42

标签: java

编辑前的问题:如何在类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类的后续代码行中使用该初始化变量值。 寻求你的帮助!

1 个答案:

答案 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();
}