欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

泛型方法使用详解

程序员文章站 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:泛型接口和泛型抽象类同样不可以实例化。

相关标签: 泛型 泛型方法