Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化接口中常量的条件_Java_Design Patterns - Fatal编程技术网

Java 初始化接口中常量的条件

Java 初始化接口中常量的条件,java,design-patterns,Java,Design Patterns,我有一个接口,其中定义了应用程序中使用的常量。我有一个场景,需要根据条件初始化常量 比如说 if(condition){ public static final test = "some value"; } 这是可能的。接口不包含任何代码 将接口拆分为多个特定接口,声明并初始化它们自己的常量 这将遵循接口隔离原则,其中类不必被一些无用的常量或方法所厌烦 当然,Java允许类同时实现多个接口。因此,如果您有特定的接口来混合一个具体的类,这将是非常容易的。您可以通过以下方式设置带有条件的静态最终变

我有一个接口,其中定义了应用程序中使用的常量。我有一个场景,需要根据条件初始化常量

比如说

if(condition){
public static final test = "some value";
}

这是可能的。

接口
不包含任何代码

将接口拆分为多个特定接口,声明并初始化它们自己的常量

这将遵循
接口隔离原则
,其中类不必被一些无用的常量或方法所厌烦


当然,Java允许类同时实现多个接口。因此,如果您有特定的接口来混合一个具体的类,这将是非常容易的。

您可以通过以下方式设置带有条件的静态最终变量:

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";

这可能是接口常数不好的另一个原因。您可以简单地使用
枚举
,如下所示

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;
    }
}

接口将被实现。它们不应用作常量的载体。如果你需要这样的东西,你可以考虑一个带有私有构造函数的最终类。p> 您似乎想要的是一个全局变量或单例,它们是相当有问题的设计,或者类似于一个c预处理器指令,在编译时动态计算


如果你真的需要一个常量——在编译(或类加载)时间定义的东西。

如果条件是假,你想发生什么?如果无法编译,则必须在类加载时提供该to工作条件。我怀疑是这样。@AmitD我添加了一个示例,说明如何从属性文件加载条件。
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;
    }
}