9.1.2 泛型的创建和使用

更新于 2026年10月10日 版权声明
9.1.2 泛型的创建和使用

在了解泛型的作用之后,可以灵活地在不同场合使用泛型。泛型可以用在类、方法和接口中,下面将详细介绍泛型类、泛型方法和泛型接口。

1.泛型类

在类的声明时使用泛型,其定义格式如下:

修饰符 class 类名<代表泛型的变量> { }

例如,在Java API中的ArrayList类的关键代码为:

图示

上述代码中的E表示类型占位符。如果在类的声明时使用了泛型,那么在创建这个类的实例时需要指定这个泛型的具体类型。例如,创建一个String类型的ArrayList集合关键代码为:

ArrayList<String> list = new ArrayList<String>();`

此时,变量E的值就是String类型,那么可以认为编译器理解的代码为:

图示

要创建一个Integer类型的ArrayList集合,就需要使用ArrayList<Integer> list = new ArrayList<Integer>(),此时,变量E的值就是Integer类型,那么ArrayList类的代码就可以理解为:

图示

图示

说明:

类型占位符可以是任意字符,建议使用一个大写字母表示(如字母T),且该字符不能为已定义的关键字。

2.泛型方法

除了在声明类的时候使用泛型,在方法中也可以使用泛型。含有泛型的方法定义格式为:

修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }

例如,在Java API中的ArrayList类的add()方法和get()方法:

图示

ArrayList类的add()方法参数为泛型,get()方法的返回值类型为泛型。再例如,自定义一个泛型方法,传递任意类型的数据都能正常输出,定义的关键代码如下:

图示

在调用泛型方法时,应该确定泛型的类型:(https://www.daowen.com)

图示

注意:

泛型的类型不能指定为基本类型,如果是数据是基本类型应该传递该类型的包装集类型。如int类型的数据应使用Integer,double类型的数据应使用Double。

Demo01的输出结果为:

图示

3.泛型接口

在声明接口的时候,也可以采用泛型,表示当前接口可以接收泛型,其定义格式如下:

修饰符 interface接口名<代表泛型的变量> { }

例如:

图示

上述代码中,MyGenericInterface是一个泛型接口,在该接口中包含两个虚方法add()和get()。

由于接口必须要有实现类,因此泛型接口的类型指定有两种方式:一是在编写实现类时指定泛型的类型;二是实现类也采用相同的泛型占位符,在创建实现类的实例时指定泛型的类型。

(1)编写实现类时指定泛型的类型。

例如,编写一个MyGenericInterface的实现类MyImp1.java,并在实现接口的时指定泛型的类型为String,代码如下:

图示

如果在实现类中已经指定了泛型接口的类型,那么在创建类的实例时就不需要再指定类型了。

图示

(2)始终不确定泛型的类型,直到创建实现类的实例时,确定泛型的类型。

例如,编写一个MyGenericInterface的实现类MyImp2.java,在实现接口时不指定泛型的类型,代码如下:

图示

如果在实现类中没有指定泛型接口的类型,那么在创建类的实例时就需要指定类型,以String类型为例,代码如下:

图示

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)