Kosmos
            泛型适用的是类类型,而不能是简单类型
泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。
List<Integer>与List<Boolean>的Class是一样的,所以说类型相同
泛型标识<泛型标识>可以声明在类和方法
?代表的某一种类型,而不是多种,是实际的参数,而不是像T的形式参数
public class GenericsClass<T> {
    private T key;
    public GenericsClass(T key)
    {
        this.key = key;
    }
    public T getKey() {
        return key;
    }
}
表明T是泛型类型
GenericsClass<Integer> a = new GenericsClass<Integer>(123); //显示声明
GenericsClass a = new GenericsClass(123);
GenericsClass<?>可以匹配任何类型,但是只能使用Object的方法
public interface GenericsInterface<T> {   
    public T hello();   
}  
可以还是返回泛型
public class GenericsImpl<Anything> implements GenericsInterface {
    @Override
    public Anything hello() {
        return null;
    }
}
或者返回具体类
public class GenericsImpl implements GenericsInterface<Object> {
    @Override
    public Object hello() {
        return null;
    }
}
public class GenericsMethod<T> {
private T key;
    public T hello()
    {
        return key;
    }
    public <T> T hello(GenericsClass<T> genericsClass)
    {
        T a = genericsClass.getKey();
        return a;
    }
}
只要方法有<泛型标识>,那么即使方法中声明的泛型T与类声明的泛型T是一个字母,但是他们是两个不同的泛型,所以说泛型方法能使方法独立于类而产生变化
类中定义使用泛型的静态方法,需要添加额外的泛型声明
public static <T> void show(T t){}
无论何时,如果你能做到,你就该尽量使用泛型方法。也就是说,如果使用泛型方法将整个类泛型化,
那么就应该使用泛型方法。另外对于一个static的方法而已,无法访问泛型类型的参数。
所以如果static方法要使用泛型能力,就必须使其成为泛型方法。
GenericsClass<T extends Number>
表示GenericsClass可以声明为GenericsClass<Number及其子类>
GenericsClass<T super Number>
表示GenericsClass可以声明为GenericsClass<Number及其父类>
List
普通的集合定义,可以存放任何数据
List<Object>
泛型限制Object,但是List