続・型推論できてしまうコレクション系ユーティリティ

koichik 2008/05/16 19:30 > クラス名が Arrays と短い

import static ...CollectionsUtil.*;

Eclipse で [Window]-[Preferences] の [Java]-[Editor]-[Content Assist]-[Favorites] に CollectionsUtil を登録しておけば快適.


先ほどのエントリに対して、CollectionsUtil の開発者である id:koichik さんからコメントを頂きました。
id:koichik さんのコメントに習うと、たとえば、

List<String> listOfStrings = new ArrayList<String>();
Map<Integer, String> map = new HashMap<Integer, String>();
List<Map<String, Object>> mapItems = new ArrayList<Map<String, Object>>();


は『S2 TigerのCollectionsUtil』と『Java5から導入されたstatic import』を使って、
次のように書き換えることができます。

List<String> listOfStrings = newArrayList();
Map<Integer, String> map = newHashMap();
List<Map<String, Object>> mapItems = newArrayList();


どーですか?
タイプセーフなのに、簡潔に記述できて、可読性が高い。
自分的には、かなりイケてると思います。
(まるでコンストラクタを使って new してるみたい。)


今まで自分は、static importはEclipseと相性が悪い(メソッド補完が効かない)
という理由でやや敬遠していました。
でも、id:koichik さん のコメントを通じて教えて頂いた方法だと、
かなりいい感じで使えますね。


せっかくなので、Eclipseの設定方法を詳しく記述しておく。

Eclipse & static import で CollectionsUtilを快適に使う

まずは、Eclipseの設定。
次の画像のように、Eclipseで [Window]-[Preferences] の
[Java]-[Editor]-[Content Assist]-[Favorites] に CollectionsUtil を登録します。


※ ちなみに、上記のEclipseのバージョンは 3.3.1.1


上記の設定を済ませておくと、
たとえば、以下のコードを入力する場合に、

List<Map<String, Object>> mapItems = newArrayList();


下図のように、= (イコール)よりも後で Ctrl + Space を押すことで
メソッド補完してくれるようになります。


しかも、メソッド補完した後には、自動的に以下のようなstatic import 文を書いてくれる。

import static org.seasar.framework.util.tiger.CollectionsUtil.newArrayList;


ソースコードの「読み易さ」と「書き易さ」が両立できるって、
素晴らしいことだと思います。