泛型,其实是一种自定义的数据类型。可以在类、接口、方法中,定义泛型,泛型在定义时并不明确,只有在使用泛型类,泛型接口和泛型方法时,才会明确类型,类似于参数的传递。
1. 泛型在类中的应用
-
泛型定义的位置
public class ArrayList<E>{} public class HashMap<E,T>{}
-
泛型的实现位置
//jdk1.7的新特性,菱形泛型 ArrayList<String> arrayList=new ArrayList<>{}
-
泛型不能被继承,只能在当前类中使用
public class Student extends Person<String>{} //在子类定义一个泛型T,用这个类型给父类的泛型设置类型 public class Driver<T> extends Pserson<T>{}
-
在使用泛型类时,如果没有显示的设置泛型类型,则默认为Object类型
2. 泛型在接口中的应用
略
3. 泛型方法的使用
//定义在返回值前,并且必须在参数中有体现,不然这个泛型没有意义
public <E> void show(E[] e){
}
4. 泛型限定
? :通配,表示可以是任何类型的
? super Dag :可以是Dog类型,或者Dog类型的子类
? extends Dog :可以是Dog类或者Dog类的父类
5. 实现泛型数组
当你想要直接new一个泛型数组时,很抱歉你将得到一个:Type parameter ‘E’ cannot be instantiated directly**(类型参数“ E”不能直接实例化)**
但是,别担心,会有办法的,我们可以通过java.lang.reflect.Array类的newInstance方法得到
public E[] toArray(E[] component){
E[] eArray=(E[]) java.lang.reflect.Array.newInstance
(comonent.getClass().getComponentType(),component.length);
...
return eArray;
}