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 さん)