import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; /** * author:sustbeckham * 泛型实例创建的类型推断 **/ public class TypeInference { public static void main(String args[]){ // jdk6 之前的泛型写法 Map<String, Integer> map1 = new HashMap<String, Integer>(); // jdk7 现在可以这么写法,HashMap可以推断出泛型类型 Map<String, Integer> map2 = new HashMap<>(); // 但是类型推测也是有限制的 // 这里当然能推断出来 List<String> list = new ArrayList<>(); // 这个当然也对 list.add("beckham"); // ------------这个就不对了,也很好理解,你直接冒出来一个这<>,谁知道你是什么啊--------------- // 当然看错误你就会发现 这里实际是要放入一个new ArrayList<Object>() // 所以有2种改造方法 // 1. 前面的定义改为List<Object> list = new ArrayList<>(); // 2. List<? extends String> list2 = new ArrayList<>(); // list.addAll(list2); // list.addAll(new ArrayList<>()); List<? extends String> list2 = new ArrayList<>(); list.addAll(list2); // 下边是关于类的类型推测。挺拗口的 new MyClass<Integer>("Liverpool"); // 泛型类也是可以推测的,和以上的方法类似。比如原始的方式应该是... MyClass<Integer> m1 = new MyClass<Integer>("m1"); // 现在可以写成... MyClass<Integer> m2 = new MyClass<>("m2"); // 甚至于! <String> (不过这种方式暂时在测试时候没有通过,是不是7以后的update版本会有呢?) // MyClass<Integer> m3 = new <String> MyClass<>("m3"); } } /** * 一个简单的泛型类 **/ class MyClass<X> { // 只是构造器而已 <T> MyClass(T t){ System.out.println(t); } }