Think in java P450
public class SimplerPets { public static void main(String[] args) {
Map<Person, List<? extends Pet>> petPeople = New1.map();
//赋值没有报错
f(New1.map());//编译不通过
//Error:(15, 18) java: 不兼容的类型: java.util.Map<java.lang.Object,java.lang.Object>无法转换为java.util.Map<com.jxufe.decorator.Person,java.util.List<? extends com.daxiyan.thinkinjava.generic.Pet>>
f(New.<Person, List<? extends Pet>>map());
}
static void f(Map<Person, List<? extends Pet>> petPeople) { } } class New { public static <K,V> Map<K,V> map() { return new HashMap<K,V>(); } public static <T> List<T> list() { return new ArrayList<T>(); } public static <T> LinkedList<T> lList() { return new LinkedList<T>(); } public static <T> Set<T> set() { return new HashSet<T>(); } public static <T> Queue<T> queue() { return new LinkedList<T>(); } // Examples: public static void main(String[] args) { Map<String, List<String>> sls = New1.map(); List<String> ls = New1.list(); LinkedList<String> lls = New1.lList(); Set<String> ss = New1.set(); Queue<String> qs = New1.queue(); } }
类型推断只对赋值有效,其他时候并不起作用。