获取属性值并将其传递给超类

时间:2011-06-30 06:49:52

标签: java

我需要从属性文件中获取属性值,然后将其传递给超类构造函数。但是,由于应首先调用super(value);,我应该在哪里加载文件并获取属性值?

6 个答案:

答案 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")));
    }
}