有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

比如说

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

这可能吗


共 (5) 个答案

  1. # 1 楼答案

    Interface不包含任何代码

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

    这将遵循Interface Segregation Principle,在这个过程中,类不必对一些无用的常量或方法感到厌烦

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

  2. # 2 楼答案

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

    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. # 3 楼答案

    接口将被实现。它们不应用作常数的载体。如果你需要这样的东西,你可以考虑一个带有私有构造函数的最终类。p>

    您似乎想要的是一个全局变量或单例,它们是相当有问题的设计,或者类似于c预处理器指令的东西,在编译时动态地进行评估

    请考虑它是否是一个真正需要的常数——在编译(或类加载)时间定义的东西。p>

  4. # 4 楼答案

    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;
            }
        }
    }
    
  5. # 5 楼答案

    这可能是界面常数不好的另一个原因。你可以像下面那样简单地使用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;
        }
    }