是否可以通过不同的类获取和设置类变量?

时间:2019-01-09 16:09:58

标签: java

我尝试使用setter实例化其他A类的类,并使用getter将变量获取到B类,但是它返回null。我了解到,由于我创建了类的新实例,因此这就是null的原因。什么是其他方法?

public class ContextBrowser {
String browser;

public String getBrowser() {
    return browser;
}

public void setBrowser(String browser) {
    this.browser = browser;
}
}


public class SetBrowser{

public void setCurrentBrowser(String browser){       
    ContextBrowser contextBrowser =  new ContextBrowser();
    contextBrowser.setBrowser(browser);
}
}


public class getBrowser{

public String readBrowser(){
  ContextBrowser contextBrowser =  new ContextBrowser();
  return contextBrowser.getBrowser()
}
}

2 个答案:

答案 0 :(得分:-1)

public class ContextBrowser {
    /*
    Singleton class
    */

    private String browser;

    private static ContextBrowser contextBrowserInstance;

    // private constructor
    private ContextBrowser() {}

    public static ContextBrowser getContextBrowserInstance() {
        if(contextBrowserInstance == null) {
            contextBrowserInstance = new ContextBrowser();
        }
        return contextBrowserInstance;
    }

    public String getBrowser() {
        return browser;
    }

    public void setBrowser(String browser) {
        this.browser = browser;
    }

}


public class SetBrowser{

    public void setCurrentBrowser(String browser){       
        ContextBrowser contextBrowser =  ContextBrowser.getContextBrowserInstance();
        contextBrowser.setBrowser(browser);
    }
}


public class GetBrowser{

    public String readBrowser(){
      ContextBrowser contextBrowser =  ContextBrowser.getContextBrowserInstance();
      return contextBrowser.getBrowser();
    }
}

答案 1 :(得分:-1)

具有线程安全类的改进代码:

public class ContextBrowser {

private String browser;
private ContextBrowser() {}

public static synchronized ContextBrowser getInstance(){
    return instance.get();
}

public String getBrowser() {
    return browser;
}

public void setBrowser(String browser) {
    this.browser = browser;
}

private static ThreadLocal<ContextBrowser> instance = new ThreadLocal() {

    @Override
    protected ContextBrowser initialValue() {
        return new ContextBrowser();
    }
};
}