Java培训课程之 泛型的特殊点

1、泛型没有多态

如果B是A的一个子类型(子类或者子接口),而G是具有泛型声明的类或接口,G<B>并不是G<A>的子类型!

比如:String是Object的子类,但是List<String >并不是List<Object>的子类。

Java培训课程

       public static void main(String[] args) {

              Fruit f = new Apple();//多态

              //泛型没有多态

//            ArrayList<Fruit> list = new ArrayList<Apple>();//泛型没有多态

              ArrayList<? extends Fruit> list = new ArrayList<Apple>();//使用通配符可以

}

 

2、没有泛型数组

public class TestGenericPolymophism {

 

       public static void main(String[] args) {

              //泛型没有数组

//            Tiger<String>[] as = new Tiger<String>[];

       }

 

}

class Tiger<T>{

 

}

ArrayList源代码

public class ArrayList<E>  。。。{

    transient Object[] elementData;

    public boolean add(E e) {

        ensureCapacityInternal(size + 1);  // Increments modCount!!

        elementData[size++] = e;

        return true;

}

    public E get(int index) {

        rangeCheck(index);

        return elementData(index);

}

    E elementData(int index) {

        return (E) elementData[index];

    }

}

3、jdk1.7简化泛型

       //jdk1.7,泛型的简化操作

       ArrayList<Fruit> flist = new ArrayList<>();

 

4、不能在try-catch中使用泛型定义

try{

}catch(T t){}        

}

 


上一篇:
下一篇: