我不确定我是否正确地问这个问题,因为我正在尝试自学Java。我有一个包含main方法的类,在这个类中有几个需要使用java.util.Properties访问我的用户设置的子类。我必须在每个子类中创建属性对象以使其工作,并且我不能使用configFilePath引用该对象,它必须为null。我想知道我是否可以在父类中创建这个公共对象,所以我不需要在它的所有子类中创建它?这是我的代码,我真的不确定我做得对,虽然它有效。
public class Frame1 extends JFrame {
Settings config = new Settings(); //this is the object I want to reference within subclasses
class Update extends SwingWorker<Integer, Void> { //first subclass
@Override
protected Integer doInBackground() throws Exception {
Settings config = new Settings(configFilePath); //yet I have to create the object within every subclass, this time an argument is required.
String templateDir = config.getProperty("templatedir");
String writePath = config.getProperty("outputdir");
//do some logic code, not required for my question
}
@Override
protected void done() {
Update2 update2 = new Update2();
update2.execute(); //start the next subclass which also needs access to Settings(configFilePath)
}
}
}
public class Settings extends JFrame {
String configFilePath = "C:/path/to/settings.properties";
Properties properties = new Properties();
public Settings(String configFilePath) throws IOException {
this.configFilePath = configFilePath;
FileInputStream fis = null;
try {
fis = new FileInputStream(configFilePath);
properties.load(fis);
} catch (FileNotFoundException e) {
setDefaults();
} finally {
if (fis != null) {
fis.close();
}
}
}
}
我不确定我是否正确这样做,它似乎工作但似乎相当多余,每次我需要访问我的用户设置时都必须创建配置对象。我希望以前没有问过这个问题,如果有问题请联系我,因为我找不到它。
答案 0 :(得分:2)
您可以将Setting类创建为Singleton模式,这是一个示例:
public class Settings extends JFrame{
String configFilePath = "C:/path/to/settings.properties";
Properties properties = new Properties();
private static Settings instance;
public static Settings getInstance(){
if(instance==null){
instance = new Setting();
}
return instance;
}
private Settings() throws IOException {
FileInputStream fis = null;
try {
fis = new FileInputStream(configFilePath);
properties.load(fis);
} catch (FileNotFoundException e) {
setDefaults();
} finally {
if (fis != null) {
fis.close();
}
}
}
}
在系统的任何其他类中使用:
Settings.getInstance().getProperty("...");
答案 1 :(得分:1)
从Update
,您可以使用Frame1.this
访问this
的{{1}}(因为Frame1
是Update
的内部类。
然后,要访问Frame1
,您可以使用config
。
这是一个有效的例子:
Frame1.this.config