static のメソッドと static なフィールドだけからなるクラスを書く場合は private コンストラクタでインスタンス化不可能をクライアントに強制するべきである。
static ユティリティクラス
そのようなクラスは悪く評価されていることもあるが、java.lang.Math や java.util.Array のように、基本データ型や配列に対する関連したメソッドをまとめるためには有用である。
インスタンス化を防ぐためにクラスを抽象化することは無意味。ライブラリを利用する人はサブクラスを生成し、結局、インスタンスを生成されてしまう。 特に抽象クラスを用いるとユーザーに、継承するために作られているクラスだと誤解させる。
インスタンス化を防ぐ
インスタンス化させないことを明示的にするため 1 つの明示的な private コンストラクタを作る。
public class UtilityClass { private Utility() { throw new AssertionError(); } }
この明示的なコンストラクタは private なので外部からはアクセス不能。 AssertionError は必須ではないが、意図せぬ呼び出しを防ぐことができる。
また、この手法は副作用としてクラスのサブクラスのインスタンスを作ることも防いでくれます。
感想
これはよくある手法だと思う。実際いろんな場所でよく見るしね。
ただ、throw AssertionError までやってるかなぁ。。。大きいオープンソースのライブラリとかだとやってるのかな。 単にサポートしてないメソッド呼び出しでサポートしてません例外が出ることはたまに見かけるけどなぁ…

EFFECTIVE JAVA 第2版 (The Java Series)
- 作者: Joshua Bloch,柴田芳樹
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る
Kindle 版はこちら(ただし英語)

Effective Java: A Programming Language Guide (Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2008/05/08
- メディア: Kindle版
- この商品を含むブログを見る