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

Java 减少静态方法/变量和多个属性文件之间的代码重复,java,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个这样的环境文件,所有getPro

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

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方法都是相同的,只是每个环境文件的属性_文件都不同

我有这20个几乎相同的环境文件,因为它们每个都绑定到20个不同的枚举类型,属性稍有不同

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


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

首先,您可以编写一个
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
也可以声明为带有值
FIRST
SECOND
等的enum。

首先,您可以编写一个
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
也可以声明为带有值
FIRST
SECOND
等的枚举。

我不确定是否理解。。。你想怎样得到一些财产<代码>Env1.getPropertyA();Env2.getPropertyA()?@WaleryStrauch完全正确。不要使用静态。仅使用一个环境类,并使用不同的属性文件对其进行初始化。然后使用依赖注入,例如Guice。我不确定我是否理解。。。你想怎样得到一些财产<代码>Env1.getPropertyA();Env2.getPropertyA()?@WaleryStrauch完全正确。不要使用静态。仅使用一个环境类,并使用不同的属性文件对其进行初始化。然后使用依赖注入,例如Guice。谢谢!工作很有魅力,谢谢!工作得很有魅力。