Java中单例中的setter/getter
我需要为应用程序创建有效的setter/getter,它将使用几个不同的类。这些类将使用一个类来存储所有数据。我知道,当我使用容器类的标准构造函数时,由于容器类的不同实例,我会得到大量空值 我已经在一个单例中创建了容器类,这很有效,但我想问,任何事情都可以做得更好。我的代码: Container.java:Java中单例中的setter/getter,java,singleton,getter-setter,Java,Singleton,Getter Setter,我需要为应用程序创建有效的setter/getter,它将使用几个不同的类。这些类将使用一个类来存储所有数据。我知道,当我使用容器类的标准构造函数时,由于容器类的不同实例,我会得到大量空值 我已经在一个单例中创建了容器类,这很有效,但我想问,任何事情都可以做得更好。我的代码: Container.java: public class Container { public static final String String = "Welcome in Singleton Contain
public class Container {
public static final String String = "Welcome in Singleton Container\n";
private String Test = null;
private String appName = null;
private String appOwner = null;
private Container(String mes) {
System.out.println("Message from Container: " + mes);
}
private static class SingletonHolder {
private final static Container INSTANCE = new Container(String);
}
public static Container getInstance() {
return SingletonHolder.INSTANCE;
}
public String getTest() {
return Test;
}
public void setTest(String test) {
Test = test;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getAppOwner() {
return appOwner;
}
public void setAppOwner(String appOwner) {
this.appOwner = appOwner;
}
}
将使用此容器的示例类:
public class SecondClass {
Container ctn = Container.getInstance();
.
.
some methods...
}
现在,当我在主类中使用时,即:
ctn.setAppOwner(owner);
我在任何其他类中都会得到一个合适的值,当我调用它时:
Container ctn = Container.getInstance();
ctn.getAppOwner();
这是一个好方法吗?您可以使用ResourceBundle概念
public class Container {
public static final String message = "Welcome in Singleton Container\n";
private static Container container;
private String test = null;
private String appName = null;
private String appOwner = null;
private Container(String mes) {
System.out.println("Message from Container: " + mes);
init();
}
private void init() {
ResourceBundle myResources = ResourceBundle.getBundle("application.properties");
this.test = myResources.getString("app.test");
this.appName = myResources.getString("app.appName");
this.appOwner = myResources.getString("app.appOwner");
}
public static Container getInstance() {
if( container == null ) {
synchronized( Container.class ) {
if( container == null ) {
container = new Container(message);
}
}
}
return container;
}
public String getTest() {
return test;
}
public String getAppName() {
return appName;
}
public String getAppOwner() {
return appOwner;
}
}
然后创建名为application.properties的属性文件,并包含以下内容
app.test=test
app.appName=abc
app.appOwner=xyz
然后将文件夹名放在classpathString字符串中,我的眼睛!!我投票结束这个问题,因为它要求一系列的工作代码。我建议对一个单例使用枚举。还有什么可以做得更好的吗?当然应尽可能避免使用单例、可空字段和可变类。我尝试只使用无状态的单例。我在考虑ResourceBoundle,但我想,我将首先尝试在类路径中不使用任何附加文件。