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);
}
}