この世で最も美しい数式は何か?
と問われれば、恐らく皆あの数式を思い浮かべる事と思う。
e ^ iπ = -1
有名なオイラーの等式である。
では、この世で最も美しいJavaのコードは何だと思う?
かなり漠然とした問ではあるが、こう聞かれたらぼくはこう答える事にしている。
(なお、そんなことを実際に聞かれた事はない)
この世で最も美しいJavaのコード
シングルトンホルダーパターン
いわゆる「ダブルチェックロッキング問題」へのひとつの解として、 Initialization-on-demand holder というイディオムを用いた シングルトンホルダーという実装パターンがある。
(上記Wikiのリンク先にも書いてあるけど)コード見せた方が早いと思うのでまんま書くとこういうもの。
public class Singleton { private static class SingletonHolder { static final Something INSTANCE = new Something(); } // この SingletonHolder クラスにアクセスするまで初期化は遅延され、且つ初期化は排他的に同期不要で実行される。 }
良くやるのは jackson
の ObjectMapper や、或いはシステム内で共通して使用する外部定義や環境設定依存のキャッシュデータとかをシングルトンとして保持する場面とか。
このパターンの良い所
に関しては、後述する参考ページを読めばだいたい書いてあるのでそっちに譲ります。
このパターンの美しい所
このシングルトンホルダーパターンの実装は「シングルトンをスレッドセーフに遅延初期化したい!!」と言う要求に対して、言語仕様的に合理的に且つ極めてシンプルなコードで問題解決していると言う点。
これが本当に美しいと思う。
はじめてこのパターンを知った時は目から鱗が落ちるどころか勢いあまって目玉が落ちるレベルで感動した。
言っちゃなんだけどこれが本当にJavaのコードなのかと思うくらいにシンプルで美しいコードだと思った。
ぼくの中でのJavaのイメージって、言語自体が不便過ぎたあまりに reflection と言う禁呪に手を出して悪魔的な便利さを手に入れた黒魔術的な言語って感じなんだけど、何故かここだけ白魔法になってるみたいな、なんかそんな感じ。