[Java] Generic explicit type parameter 이야기 |
참조 : http://shanhe.me/2011/09/11/explicit-type-parameters-for-generic-methods
참조 : http://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html
-
자바 7, 8 로 version up 이 되면서 조금 더 강화된 compiler 로 type inference 도 강화되어 explicit type parameter 를 지정할 일이 거의 없다.
-
public static <K, V> Map<K, V> toHashMap(Map<K, V> map) {
return new HashMap<K, V>(null == map ? Collections.emptyMap() : map);
} // does not compile!
Collections.emptyMap() 자체가 type inference 방식으로 되어 있기 때문에,
위의 코드에서 다시 type inference 를 제대로 못 하는 것으로 추정된다.
이럴 경우 강제 혹은 명시적으로(explicit) type parameter 를 설정해줄 수 있다
public static <K, V> Map<K, V> toHashMap(Map<K, V> map) {
return new HashMap<K, V>(null == map ? Collections.<K, V> emptyMap() : map);
}
여기서 주목해야 할 것은 <K,V> 로의 type 지정이 Class 와 Method 이름 사이에 있다는 것.
-
참고로 static method 를 explicit type parameter 를 주면서 호출하려고 하면,
static import 방식으로 안 되고, 반드시 class 명을 붙여서 호출해야 한다.
-
void processStringList(List<String> stringList) {
// process stringList
}
processStringList(Collections.emptyList());
위 코드는 explicit type parameter 지정이 필요하다. ( @Java 7, but no @Java 8 )
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[java] readResolve, writeReplace 뭐 하는 녀석일까? (0) | 2016.11.03 |
---|---|
[Java] writeObject 와 readObject 는 무엇인가? (0) | 2016.10.25 |
WeakHashMap 에 대해 제대로 이해하자. (0) | 2016.10.13 |
[android] Fragment 와 함께라면 Configuration Change 가 무섭지 않아. (0) | 2016.10.12 |
[android] PageTransformer 와 함께 하는 ViewPager 의 화려한 animation (0) | 2016.10.04 |
댓글