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。谢谢!工作很有魅力,谢谢!工作得很有魅力。