Effective Java(第二版),第4项,讨论使用私有构造函数来强制执行非实例化.这是本书中的代码示例:
public final class UtilityClass { private UtilityClass() { throw new AssertionError(); } }
然而,AssertionError
似乎不是正确的抛出.没有任何东西被"断言",这就是API如何定义AssertionError的使用.
Throwable
在这种情况下,通常会有不同的情况吗?通常只会抛出一个Exception
带有消息的将军吗?或者为此编写自定义是否常见Exception
?
这是非常微不足道的,但我认为从形式和标准的角度来看,我只是对它感到好奇.
有一个断言:"我断言这个构造函数永远不会被调用".的确,AssertionError
这里确实是正确的.
我喜欢包括Bloch的评论:
// Suppress default constructor for noninstantiability
或者更好,但把它放在错误中:
private UtilityClass() { throw new AssertionError("Suppress default constructor for noninstantiability"); }