इस उदाहरण में:
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>
पहला संकलन क्यों नहीं है?