确保在构造函数抛出异常时初始化最终变量

gar*_*tor 0 java constructor final exception

我有一个最终的会员数据:

public final Foo foo;
Run Code Online (Sandbox Code Playgroud)

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

foo = new Foo();
Run Code Online (Sandbox Code Playgroud)

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

try {
    foo = new Foo();
} catch (Exception e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是现在编译器抱怨foo可能没有被初始化,如果Foo的构造函数抛出异常就是这样.但是如果我把foo = null它放在内部,它会抱怨foo可能已经被初始化了.

Foo是我无法修改的第三方库.

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

Oli*_*rth 7

foo = createFoo();

...


private static Foo createFoo() {
    try {
        return new Foo();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

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