new HashMap…()が冗長なので短くしてみた

// Java5.0 and Later
Map<String, Map<String, Map<String, Map<String, Map<String, Integer>>>>> hoge =
  new HashMap<String, Map<String, Map<String, Map<String, Map<String, Integer>>>>>; 

こんなコードは見たくない

同感なので、ちょっと短くしてみた。

  • "NMap.newMap().put("map1", 0);"って書きたいところだけど、エラーとなるらしい。⇒そういやboolean返すんだから当たり前だ。
  • Mapの実装クラスもパラメータとして渡したいけど、リフレクトと<K, V>の辺りがよくわかってないので…。何か方法ないのかなぁ。⇒やってみた。無理やりcastできるっぽい。⇒明示的にcastしなくても大丈夫らしい。
  • 変数定義する方の<<<>>>も短くしたいけど、そりゃ無理だろうなぁ。
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class NMap {
	public static <K,V> Map<K, V> newMap(){
		return new HashMap<K, V>();
	}

	//追記
	public static <K,V> Map<K, V> newMap(Class<? extends Map> mapClass){
		try {
			return mapClass.newInstance();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	/** 使用例 */
	public static void main(String[] args) {
		Map<String, Integer> map1 = 
			NMap.newMap();
		map1.put("map1", 0);
		
		Map<String, Map<String, Integer>> map2 = 
			NMap.newMap();
		map2.put("map2", map1);
		
		Map<String, Map<String, Map<String, Integer>>> map3 = 
			NMap.newMap();
		map3.put("map3", map2);
		
		System.out.println(map3); //prints "{map3={map2={map1=0}}}"

		//追記
		Map<String, Integer> map = NMap.newMap(TreeMap.class);
		map.put("key1", 1);
		map.put("key2", 2);
		System.out.println(map); //prints "{key1=1, key2=2}"
	}
}