ImageRegistryの初期化-定数に対するインジェクション
http://d.hatena.ne.jp/taichitaichi/20060530/1149005521
で id:taichitaichi さんがアイデアを書いてくれていたものですが、S2JFace に org.seasar.jface.util.ImageManager というユーティリティクラスに取り込みました。
id:taichitaichi さんの指摘する問題点は、
Image image = ImageManager.get("ARG_IMG");
のようにして登録する使い方だと、結局リテラルが散乱して使いにくいというものでした。
「せっかくなので、定数のように使えると便利だよね」というのが出発点だったと思います。
私なりに少しアレンジして取り込ませていただきました。色々考えると、結局はImageManagerの管理するImageリソースを定数として扱えればよいわけで、クラスの持つ定数フィールドに対するインジェクションという機能に整理しました。(やっていることは taichi さんのアイデアと変わらないのですが・・・)
以下のような定数をもつクラスを用意しておいて
public class ImageHolder() { public static Image IMAGE_A; public static ImageDescriptor IMAGE_B; }
以下のように injectImages メソッドを使うと、
ImageManager.injectImages(ImageHolder.class);
ImageHolder の定数フィールドにImageManagerが保持する同名のImageをインジェクションしてくれます。定数が Image 型なら Image を、ImageDescriptor なら ImageDescriptor としてインジェクションします。
また、該当するキーを ImageManager が保持していない場合は Warning ログを出すようにしました。
こんな感じでいかがでしょうか?(> id:taichitaichi さん)