我有一个接口,我已经定义了跨应用程序使用的常量。我有一个场景,我需要根据条件初始化常量。
例如,
if(condition){
public static final test = "some value";
}
这可能。
答案 0 :(得分:1)
Interface
不包含任何代码。
在许多特定接口中拆分界面,声明并初始化自己的常量。
这将遵循Interface Segregation Principle
,其中一个类不必厌倦一些无用的常量或方法。
当然,Java让类一次实现几个接口。因此,如果你有特定的接口来混合一个具体的类,这将非常容易。
答案 1 :(得分:1)
要实现接口。它们不应该用作常量的载体。如果你需要这样的东西,你可以考虑使用私有构造函数的最终类。
你似乎想要的是一个全局变量或单例,这是一个相当有问题的设计,或类似于c预处理器指令,在编译时动态评估。
因此,请考虑它是否真的是您需要的常量 - 在编译(或类加载)时定义的东西。
答案 2 :(得分:0)
您可以通过以下方式设置静态最终变量:
public class Test {
public static final String test;
static {
String tmp = null;
if (condition) {
tmp = "ss";
}
test = tmp;
}
}
您可以在一行中进行,也可以在以下界面中进行:
public static final String test = condition ? "value" : "other value";
答案 3 :(得分:0)
public interface InitializeInInterface {
public static final String test = Initializer.init();
static class Initializer {
public static String init() {
String result = "default value";
InputStream is = InitializeInInterface.class.getClassLoader().getResourceAsStream("config.properties");
Properties properties = new Properties();
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
if ("bar".equals(properties.getProperty("foo"))) {
result = "some value";
}
return result;
}
}
}
答案 4 :(得分:0)
这可能是界面常量不好的另一个原因。您只需使用enums
,如下所示。
public enum Const {
SAMPLE_1(10), SAMPLE_2(10, 20);
private int value1, value2;
private Const(int value1, int value2) {
this.value1 = value1;
this.value2 = value2;
}
private Const(int value1) {
this.value1 = value1;
}
//Value based on condition
public int getValue(boolean condition) {
return condition == true ? value2 : value1;
}
//value which is not based on conditions
public int getValue() {
return value1;
}
}