我需要从属性文件中获取属性值,然后将其传递给超类构造函数。但是,由于应首先调用super(value);
,我应该在哪里加载文件并获取属性值?
答案 0 :(得分:4)
您需要先加载属性文件,只能在静态方法中执行此操作。听起来你真的需要一种工厂方法。
public static MyType fromProperties(String filename) {
Properties prop = new Proeprties();
prop.load(filename);
return new MyType(prop.getProperty("name"));
}
答案 1 :(得分:0)
你可以使用这种方法:
class FooWrapper {
private Foo foo;
public FooWrapper() {
Properties p = ...;
foo = new Foo(p.getProperty("smth"));
}
public Foo getFoo() {
return foo;
}
}
或者,如果你可以改变Foo,重写它不要在构造函数中使用string,而是使用特殊的init()方法:
class FooWrapper extends Foo {
public FooWrapper() {
Properties p = ...;
foo = new Foo();
foo.init(p.getProperty("smth"));
}
}
答案 2 :(得分:0)
您可以在超类中显式设置setter方法来设置值,然后从子类中调用该方法进行初始化。
答案 3 :(得分:0)
有许多选项,最简单的是超类中的受保护的init(TypeOfValue)方法,或者使用工厂方法而不是子项中的构造函数。
答案 4 :(得分:0)
您应该在应用程序中加载属性文件一次,并将其定义为可以在构造函数中直接访问的static
公共常量:
public class Foo {
public static final PropertyFile pFile = ...
public Foo() {
super(pFile.getProperty("..."));
...
}
}
答案 5 :(得分:0)
另一种选择:
public abstract class SuperClassLoad {
private String name;
public void setName(String name) {
this.name = name;
}
public void getName() {
return name;
}
}
public class ClassLoad extends SuperClassLoad {
public ClassLoad() {
super();
Properties prop = new Proeprties();
prop.load(filename);
super.setName(prop.getProperty("name")));
}
}