泛型方法使用详解
程序员文章站
2022-05-23 15:11:41
...
泛型的类代表类的声明用到类型参数;泛型的方法代表方法的声明特征用到类型参数。
在方法的类型参数有几种不同的运用方式。
【1】使用定义在类声明中的类型参数
实例如下:
public class ArrayList<T> extends AbstractList<T>...{
public boolean add(T o){
//...
}
public T get(T o){
//...
}
}
add方法返回boolean类型,get方法返回类型与类一致,参数类型均与类一致。
【2】使用未定义在类声明的类型参数
即,泛型方法拥有不同于类的类型。
实例1如下:
public <T extends Animal> void takeThing(ArrayList<T> list){
//...
}
实例2如下:
public <T> T get(T e){
//...
}
实例一中,指明了T类型为Anamal子类,实例2未指明类型,即可以为任何一种类型!默认为Object。
实例3如下图所示:
Class<T>
的作用就是指明泛型的具体类型对应的CLASS类型,而Class<T>
类型的变量c,可以用来创建泛型类的实例对象。
调用泛型方法语法格式如下:
说明一下,定义泛型方法时,必须在返回值前边加一个<T>
,来声明这是一个泛型方法,持有一个泛型T,然后才可以用泛型T作为方法的返回值。
上图示例中,参数Class<T>=User.class
;
为什么要用变量c来创建对象呢?
既然是泛型方法,就代表着我们不知道具体的类型是什么,也不知道构造方法如何,因此没有办法去new一个对象,但可以利用变量c的newInstance方法去创建对象,也就是利用反射创建对象。
为什么要使用泛型方法呢?
因为泛型类要在实例化的时候就指明类型,如果想换一种类型,不得不重新new一次,可能不够灵活;而泛型方法可以在调用的时候指明类型,更加灵活。
PS:泛型接口和泛型抽象类同样不可以实例化。
上一篇: PHP文件读写操作之文件写入代码
下一篇: hibernate的事务管理