Java-Java泛型(Generic)

泛型本质是参数化类型,即数据类型是一个参数。
可用在类/接口/方法中,分别称为泛型类/泛型接口/泛型方法,
用于数据类型不确定的情况下!

一.定义泛型

1.泛型类(作用范围是整个类)

class Gen<T> {
	private T object;
	
	public Gen(T object) {
		this.object = object;
	}
	
	public T getObject() {
		return object;
	}
}
 
public class GenDemo {
	public static void main(String[] args) {
		// 定义Int版本
		Gen<Integer> intObj = new Gen<Integer>(88);
		int i = intObj.getObject();

		// 定义String版本
		Gen<String> strObj= new Gen<String>("Hello");
		String s = strObj.getObject();
	}
}

注意: 因为static方法无法访问[泛型类的参数T],所以static方法使用泛型功能,必须用[泛型方法].

2.泛型方法(作用范围是整个方法)

public class A {
	// 必须先定义<T>,其中字母可以是任意字母,通常大写字母		
	public static <T> void test(T t) {
		System.out.println(t.getClass().getName());
	}
	
	public static void main(String[] args) {		
		// 当方法被调用时,虚拟机自动判断T的具体类型
		A.test("x");
		A.test(1);
		A.test(new A());
	}
}

二.泛型边界

泛型引用不确定,可使用泛型通配符?	
Class<?> clazz = Class.forName("xxx");
List<?> list = null;
list = new ArrayList<String>();	
list = new ArrayList<Integer>();
注意:
	1.通配符?只能用于泛型引用,不能用于泛型对象!
	2.如果只指定了<?>,则默认是任意类
	3.通配符泛型限制,<? extends Collection> <? super Double>

泛型边界
T extends A 指定泛型上边界类(泛型T必须是A类或其子类)		
T super B 指定泛型下边界类(泛型T必须是B类或其超类)

简书: http://www.jianshu.com/p/f214a26f4277
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54897872
GitHub博客:http://lioil.win/2017/02/06/Java-Generic.html
Coding博客:http://c.lioil.win/2017/02/06/Java-Generic.html