我有一个像这样的类(class):

public class SomeClassImpl implements SomeClass {
   private static final SomeLib someLib = new SomeLib();
}

我不能这样做,因为SomeLib抛出UnknownHostException。

我知道我可以将实例化到构造函数中,但是我有办法以某种方式将其实例化吗?这样我就可以将var标记为final。

我试图寻找如何在类级别上引发异常,但找不到任何东西。

最佳答案

您可以使用静态初始化程序:

public class SomeClassImpl implements SomeClass {
   private static final SomeLib someLib;
   static {
     SomeLib tmp = null;
     try {
       tmp = new SomeLib();
     } catch (UnknownHostException uhe) {
       // Handle exception.
     }
     someLib = tmp;
   }
}

请注意,我们需要使用一个临时变量来避免“变量some​​Lib可能尚未初始化”的错误,并应对由于someLib而只能分配一次final的事实。

但是,需要向静态初始值设定项添加复杂的初始化逻辑和异常处理通常是更根本的设计问题的标志。您在注释部分中写道,这是一个数据库连接池类。与其使用static final,不如考虑使其成为实例变量。然后,您可以在构造函数中进行初始化,也可以在静态工厂方法中进行初始化。

10-06 03:34