맵핑정보를 static map 에 선언해 놓고 쓰고 싶다.
우선 static field를 선언했다.
public class Test{ static private final Map<String, String> mappingFileds = new HashMap<String, String>(); }
초기화를 어떻게 할까??
구글링 하니 몇가지 방법이 나왔다.1. static initializer block
private static final Map<Integer, String> myMap; static { Map<Integer, String> aMap = ....; aMap.put(1, "one"); aMap.put(2, "two"); myMap = Collections.unmodifiableMap(aMap); }
참고로 class block(instance block 이라고도 하던데..) 안에 brace로{}감싼 부분을 initialzer block이라고 하고
나중에 컴파일러는 이부분을 constructor에 복사해준다고 한다.
물론 static을 붙여주면 한번만 실행.
2. static method
private static final Map<Integer, String> MY_MAP = createMap(); private static Map<Integer, String> createMap() { Map<Integer, String> result = new HashMap<Integer, String>(); result.put(1, "one"); result.put(2, "two"); return Collections.unmodifiableMap(result); }3. double brace initialization (anonymous class 이용한 trick)
private static final Map<Integer, String> CONSTANT_MAP = Collections.unmodifiableMap(new HashMap<Integer, String>() {{ put(1, "one"); put(2, "two"); }});
* ImmutableMap 사용하면 바로 값을 넣어줄 수도 있다
static final Map<Integer, String> MY_MAP = ImmutableMap.<Integer, String>builder() .put(1, "one") .put(2, "two") // ... .put(15, "fifteen") .build();
ref
http://stackoverflow.com/questions/507602/how-to-initialise-a-static-map-in-java
'program language > java' 카테고리의 다른 글
log4j 설정 (1) | 2012.04.09 |
---|---|
junit4 정리 (0) | 2012.04.04 |
JAX-RS: Java API for RESTful Web Services (0) | 2012.03.26 |
JDO(Java Data Object) (0) | 2012.03.15 |
JSR(Java Specification Requests),JCP(Java Community Process) (1) | 2012.03.06 |