在Java中使用构造函数之前初始化最终变量

时间:2013-12-09 10:45:54

标签: java

这个问题延伸Initialize final variable before constructor in Java,因为我对那里提供的答案不满意。

我有同样的问题。我有变量,我需要设置为final,但我不能这样做因为我需要将它们设置为需要捕获异常的值,因此除非我将它们放在构造函数中,否则它是不可能的。这个问题是我每次要引用final static变量时都必须创建一个新的对象实例,这些变量实际上没有意义......

除非在每次从不同的类引用对象时创建path实例,否则无法在构造函数之外或构造函数内部定义new的示例:

public class Configuration {

    private static final String path;

    public Configuration() throws IOException, URISyntaxException {
        propertiesUtility = new PropertiesUtility();
        path = propertiesUtility.readProperty("path");
    }

}

1 个答案:

答案 0 :(得分:0)

您仍然可以使用静态初始化但是您需要一些修饰来存储您应该在稍后阶段(例如在构造函数中)提取的异常。

private static final String path;
private static final java.lang.Exception e_on_startup;

static {        
    java.lang.Exception local_e = null;
    String local_path = null;

    try {
        // This is your old Configuration() method
        propertiesUtility = new PropertiesUtility();
        local_path = propertiesUtility.readProperty("path");
    } catch (IOException | URISyntaxException e){
        local_e = e;
    }

    path = local_path; /*You can only set this once as it's final*/
    e_on_startup = local_e; /*you can only set this once as it's final*/     
}