在私有效用类构造函数中使用的首选 Throwable 是什么?

2022-09-01 07:30:10

Effective Java(第二版)第 4 项讨论了使用私有构造函数来强制实施不稳定性。以下是本书中的代码示例:

public final class UtilityClass {
    private UtilityClass() {
        throw new AssertionError();
    }
}

但是,似乎不是正确的投掷。没有任何东西被“断言”,这就是API定义断言错误使用的方式AssertionError

在这种情况下,通常有什么不同吗?一个人通常只是抛出一个带有消息的将军吗?还是为此编写自定义是很常见的?ThrowableExceptionException

这是非常微不足道的,但最重要的是,我想我只是从风格和标准的角度对它感到好奇。


答案 1

有一个断言:“我断言这个构造函数永远不会被调用”。因此,这里确实是正确的。AssertionError


答案 2

我喜欢包括布洛赫的评论:

// Suppress default constructor for noninstantiability

或者更好的是把它放在错误中:

private UtilityClass()
{
    throw new AssertionError("Suppress default constructor for noninstantiability");
}