java - 确保当构造函数抛出异常时最终变量被初始化

标签 java exception constructor final

我有最终的成员(member)数据:

public final Foo foo;

在构造函数中,foo 初始化如下:

foo = new Foo();

现在,不幸的是,Foo 的构造函数可能会抛出异常:

try {
    foo = new Foo();
} catch (Exception e) {
    e.printStackTrace();
}

但现在编译器提示 foo 可能未初始化,如果 Foo 的构造函数抛出异常,则情况属实。但是如果我将 foo = null 放在 catch 大括号内,它会提示 foo 可能已被初始化。

Foo 是一个我无法修改的第三方库。

那么,处理这个问题最优雅的方式是什么?

最佳答案

foo = createFoo();

...


private static Foo createFoo() {
    try {
        return new Foo();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

如果内部对象的构造函数失败,我不会评论继续构造外部对象是否有意义......

关于java - 确保当构造函数抛出异常时最终变量被初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10078629/

相关文章:

java - Oracle JDBC 瘦驱动程序 SSL

c++ - 使用gtest测试构造函数内部条件的方法是什么?

c++ - 尝试将统计对象添加到 DoublyLinkedList

java - 将字符串转换为 UUID 格式的字符串

验证signtool签署的数字签名的Java程序

java - 在android中嵌套两个动画

c++ - 即使通过引用捕获也会发生切片

PHP日志捕获异常

java - 为什么我的异常(exception)不起作用

c++ - 具有外部定义的默认特殊成员函数