简体   繁体   中英

How can I access the member variable of class A outside the method, that has been instantiated in other class?

Question before editing: How can I delegate the initialization process of too many member variable of class A inside class B and C and still use the value inside class A? Note: (class B and C is present inside class A)

The main objective is to reduce too many member variables present in class A. I am following whats it is said in this post [1]: https://stackoverflow.com/a/16994754/2018343

code would be like is UPDATED:

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

I am really looking for delegating the initialization process of too many variables to other child class and main thing is use that initialized variable value in the subsequent lines of code in master class. Seek your help!

You can use the Builder pattern to make the initialization more user friendly.

A nice example that was taken from 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);
        }

    }
}

and how to use it:

public User getUser() {
    return new
            User.UserBuilder("Jhon", "Doe")
            .age(30)
            .phone("1234567")
            .address("Fake address 1234")
            .build();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM