如何处理抛出检查异常的静态最终字段初始值设定项

2024-02-06

我面临一个用例,我想声明一个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);
    }
}

因为静态块真的非常难以阅读。有谁对如何以良好、干净的方式处理此案有建议吗?


如果您不喜欢静态块(有些人不喜欢),那么另一种选择是使用静态方法。 IIRC,Josh Bloch 推荐了这个(显然没有在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);
    }  
}

Or:

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.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理抛出检查异常的静态最终字段初始值设定项 的相关文章

随机推荐