在了解泛型的作用之后,可以灵活地在不同场合使用泛型。泛型可以用在类、方法和接口中,下面将详细介绍泛型类、泛型方法和泛型接口。
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()方法的返回值类型为泛型。再例如,自定义一个泛型方法,传递任意类型的数据都能正常输出,定义的关键代码如下:
在调用泛型方法时,应该确定泛型的类型:(www.daowen.com)
注意:
泛型的类型不能指定为基本类型,如果是数据是基本类型应该传递该类型的包装集类型。如int类型的数据应使用Integer,double类型的数据应使用Double。
Demo01的输出结果为:
3.泛型接口
在声明接口的时候,也可以采用泛型,表示当前接口可以接收泛型,其定义格式如下:
修饰符 interface接口名<代表泛型的变量> { }
例如:
上述代码中,MyGenericInterface是一个泛型接口,在该接口中包含两个虚方法add()和get()。
由于接口必须要有实现类,因此泛型接口的类型指定有两种方式:一是在编写实现类时指定泛型的类型;二是实现类也采用相同的泛型占位符,在创建实现类的实例时指定泛型的类型。
(1)编写实现类时指定泛型的类型。
例如,编写一个MyGenericInterface的实现类MyImp1.java,并在实现接口的时指定泛型的类型为String,代码如下:
如果在实现类中已经指定了泛型接口的类型,那么在创建类的实例时就不需要再指定类型了。
(2)始终不确定泛型的类型,直到创建实现类的实例时,确定泛型的类型。
例如,编写一个MyGenericInterface的实现类MyImp2.java,在实现接口时不指定泛型的类型,代码如下:
如果在实现类中没有指定泛型接口的类型,那么在创建类的实例时就需要指定类型,以String类型为例,代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。