想到以下问题的优雅解决方案,我的头很疼。我有一个父类和几个子类。我的父类声明并实现了一个检索属性的方法,但是属性文件的名称是由子类决定的。
我只处理子类的实例。
该方法(在父类中实现)应该使用子类的字段值,但是由于我在父类中使用它,因此我也需要在那里声明它。
现在,每次我从子类调用该方法时,都会使用父类的字段值。
一些简单的代码来说明我的问题(请记住:这与功能无关 - 更多关于设计)。定义我要使用的字段值的子类:
public class SubClass extends Parent {
public static final String CONFIG_FILE = "subclass.properties"; // same problem with non-static
public SubClass() {
System.out.println(getProperty("somekey"));
}
}
以及定义和实现我要使用的方法的父类:
public class Parent {
public static final String CONFIG_FILE = "config.properties"; // same problem with non-static
public String getProperty(String key) {
Properties props = new Properties();
try {
props.load(new FileReader(new File(CONFIG_FILE)));
}
catch (IOException ioe) {
return null;
}
return props.get(key);
}
由于我getProperty(..)
从子类调用,我希望它使用它正在操作的实例的字段值(“subclass.properties”),但它使用的是父字段值(“config.properties”)。我用非静态字段得到了同样的效果。