본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] Generic explicit type parameter 이야기

by 돼지왕 왕돼지 2016. 10. 18.
반응형

 [Java] Generic explicit type parameter 이야기


<k, class method, collection.emptymap, Compiler, emptylist, explicit type parameter, Generic, Generic explicit type parameter 이야기, Java, java7, java8, K, static, static import, tohashmap, type, type inference, v, 강화, 명시적, 지정


참조 : 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 )





반응형

댓글