java - java如何处理抛出已经检查异常的static final 字段初始值设定项

  显示原文与译文双语对照的内容

我面临一个用例,我希望声明一个 static final 字段,该字段声明为。 通常情况下,它看起来像这样:

public static final ObjectName OBJECT_NAME = new ObjectName("foo:type=bar");

我这里的问题是 ObjectName 构造函数可能抛出各种检查异常,我不关心( 因为我知道我的名字是有效的,如果它是坏的,如果它不是坏的话,) 。 java编译器不会让我只忽略这个( 因为它是经过检查的异常),而且我愿意不要采取以下操作:

public static final ObjectName OBJECT_NAME;
static{
 try{
 OBJECT_NAME = new ObjectName("foo:type=bar");
 }catch(final Exception ex){
 throw new RuntimeException("Failed to create ObjectName instance in static block.",ex);
 } 
}

因为 static 块真的很难理解。 谁有关于如何用干净干净的方式处理这种情况的建议?

时间: 原作者:

如果不喜欢 static 块( 有些人't ),那么可以选择使用 static 方法。 IIRC,Josh推荐这个( 显然没有在 Effective Java 上快速检查) 。


public static final ObjectName OBJECT_NAME = createObjectName("foo:type=bar");



private static ObjectName createObjectName(final String name) {


 try {


 return new ObjectName(name);


 } catch (final SomeException exc) {


 throw new Error(exc);


 } 


}



或者:


public static final ObjectName OBJECT_NAME = createObjectName();



private static ObjectName createObjectName() {


 try {


 return new ObjectName("foo:type=bar");


 } catch (final SomeException exc) {


 throw new Error(exc);


 } 


}



( 编辑:更正了第二个示例,返回了方法,而不是分配 static 。)

你的代码是完全有效的。 我不觉得读起来很困难。 其他的方法只会让它更糟糕。 他们只是很难阅读初学者,因为大多数人都不熟悉。 按照标准约定,对代码中元素的排序进行排序。 比如 不会将 static 初始化器放在代码的一半或者在整个代码的底部,也不会在类上传播多倍。 在 static 声明后,只在顶部放置一个。

原作者:
...