减少静态方法/变量和多个属性文件之间的代码重复

时间:2013-04-07 21:34:46

标签: java

假设我有多个几乎相同的属性文件

public class Env1 {

    protected static String PROPERTIES_FILE = "some/path1";
    protected static Properties props;

    public static String getPropertyA
    ...
    public static String getPropertyZ
}

e.g。我有20个这样的环境文件,并且所有getPropertyA通过getPropertyZ方法都是相同的,只是每个环境文件的PROPERTIES_FILE都不同。

我有几个完全相同的20个环境文件,因为它们分别绑定到20种不同的枚举类型,但属性略有不同。

从代码中的任何位置调用这些环境属性都很方便,而无需实例化它们。

有没有办法减少这个20倍的代码重复,而不必将静态成员变量转换为实例成员变量?

1 个答案:

答案 0 :(得分:3)

首先,您可以编写一个Env类来封装所有属性操作并消除代码重复。这是一个骨架:

public final class Env {

    public static final PropertiesHolder FIRST = new PropertiesHolder("path/properties1.file");
    public static final PropertiesHolder SECOND = new PropertiesHolder("path/properties2.file");
    ...

    public static class PropertiesHolder {

        private final String path;
        private final Properties properties;

        public PropertiesHolder(String path) {
            ...
        }

        public String getPropertyA() {
            ...
        }

        public String getPropertyB() {
            ...
        }
    }
}

然后从你的代码中你可以像这样使用它:

Env.FIRST.getPropertyA();
Env.SECOND.getPropertyB();

我不认为这是一个很好用的模式(因为我倾向于只在真正需要时使用static)但至少你不会有20个几乎相同的类。

Env也可以声明为枚举值FIRSTSECOND等。