이 예에서 :
import java.util.*;
public class Example {
static void doesntCompile(Map<Integer, List<? extends Number>> map) {}
static <T extends Number> void compiles(Map<Integer, List<T>> map) {}
static void function(List<? extends Number> outer)
{
doesntCompile(new HashMap<Integer, List<Integer>>());
compiles(new HashMap<Integer, List<Integer>>());
}
}
doesntCompile()
컴파일하지 못했습니다 :
Example.java:9: error: incompatible types: HashMap<Integer,List<Integer>> cannot be converted to Map<Integer,List<? extends Number>>
doesntCompile(new HashMap<Integer, List<Integer>>());
^
compiles()
컴파일러가 승인하는 동안 .
이 답변 의 유일한 차이점은 그와 달리이라고 설명하고 <? ...>
, <T ...>
경우 될 것 같지 않는, 나중에 유형을 참조 할 수 있습니다.
차이점은 무엇이며 <? extends Number>
그리고 <T extends Number>
이 경우 왜 첫 번째 컴파일을하지 않는 이유는 무엇입니까?