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}" } }