2016-03-03 264 views
2

我有这个类,我想知道:
1°这是定义一个静态HashMasp
2°的最佳途径这是做在Spring基于应用程序的最佳方式(呢?春季提供更好的方法来做到这一点?)
静态HashMap的初始化

在此先感谢!

public class MyHashMap { 
     private static final Map<Integer, String> myMap; 
     static { 
      Map<CustomEnum, String> aMap = new HashMap<CustomEnum, String>(); 
      aMap.put(CustomEnum.UN, "one"); 
      aMap.put(CustomEnum.DEUX, "two"); 
      myMap = Collections.unmodifiableMap(aMap); 
     } 

     public static String getValue(CustomEnum id){ 
      return myMap.get(id); 
     } 
    } 


    System.out.println(MyHashMap.getValue(CustomEnum.UN)); 
+0

1)是绝对 –

+1

从java 9开始,您可以用类似Arrays.asList的方式创建地图,这样可以避免静态地块。试图找到我已经阅读的地方...... –

+0

你去... ['Map.ofEntries'](http://download.java.net/jdk9/docs/api/java/util/Map。 html#ofEntries-java.util.Map.Entry ...-)和['Map.of(...)'](http://download.java.net/jdk9/docs/api/java/util/ Map.html#的-KVKVKVKVKVKVKVKVKVKV-)。 –

回答

1

有几种方法可以做到这一点。例如,如果你的地图是不可变的,你可以考虑使用Google Guava libraries 它有可能是被用来构建地图的ImmutableMap类: -

static final ImmutableMap<String, Integer> WORD_TO_INT = 
     new ImmutableMap.Builder<String, Integer>() 
      .put("one", 1) 
      .put("two", 2) 
      .put("three", 3) 
      .build(); 

如果您已经使用Spring Framework和接线您豆类使用XML ,那么你可以通过XML直接填入地图: -

...  
<!-- creates a java.util.Map instance with the supplied key-value pairs --> 
<util:map id="emails"> 
    <entry key="pechorin" value="[email protected]"/> 
    <entry key="raskolnikov" value="[email protected]"/> 
    <entry key="stavrogin" value="[email protected]"/> 
    <entry key="porfiry" value="[email protected]"/> 
</util:map> 
    ... 
0

要么你可以使用番石榴图书馆。但是,如果你不想使用第三方库,那么有两种方法来做到这一点:

  1. 静态初始化

    private static final Map<String,String> myMap = new HashMap<String, String>(); 
    static { 
        myMap.put(key1, value1); 
        myMap.put(key2, value2); 
    } 
    
    public static Map getMap() { 
        return Collections.unmodifiableMap(myMap); 
    } 
    
  2. 实例初始化器(匿名子类)。

    private static final Map<String,String> myMap = new HashMap<String, String>() 
    { 
        { 
        put(key1, value1); 
        put(key2, value2); 
        } 
    }; 
    
    public static Map getMap() { 
        return Collections.unmodifiableMap(myMap); 
    } 
    
    private static void addPair(String key, String val){ 
        // Add key val to map 
    } 
    

以后假设你想添加一些常量来图,那么你就可以做到这一点为好。

Collections.unmodifiableMap:它有助于有一个不可修改的地图视图,这是无法修改的。由于它提供不受支持的异常,如果对映射进行了任何修改。