现在的位置: 首页 > 综合 > 正文

java7新特性-泛型实例创建的类型推断

2013年09月14日 ⁄ 综合 ⁄ 共 1125字 ⁄ 字号 评论关闭

 

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

抱歉!评论已关闭.