提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、泛型是什么?
泛型是程序语言的一种特性。在编程中用泛型来代替某个实际类型,而后通过实际调用时传入或推导的类型来对泛型进行替换,已达到 代码复用 的目的。泛型是JDK5引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。
***泛型的好处:***首先,统一数据类型;其次,把运行时期的问题提前至编译时期,避免了强制类型转换可能出现的异常,因为编译阶段类型就能确定下来。
注意:
泛型只支持引用数据类型。
泛型的格式: “<T>
”(其中“T”也可以用其他字母代替)
二、使用步骤
1.泛型类
泛型类就是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值和参数类型。只有用户使用该类的时候,该类所属类型才能明确。
泛型类的声明格式:
[访问权限] class 类名称<泛型标识1,泛型标识2,...,泛型标识n>;
[访问权限] 泛型类型标识 变量名称;
[访问权限] 泛型类型标识 方法名称;
[访问权限] 返回值类型声明 方法名称 (泛型类型标识 变量名称){};
代码如下:
import java.util.ArrayList;
import java.util.List;
public class dem {
public static void main(String[] args) {
// TODO 自动生成的方法存根
List<String> lists=new ArrayList<>();
lists.add("java");
lists.add("OS");
lists.add("mysql");
lists.add("java");
lists.add("java");
lists.add("c#");
for (String string : lists) {
System.out.println(string);
}
}
}
运行结果:
java
OS
mysql
java
java
c#
***作用:***编译阶段可以指定数据类型。
***原理:***把出现泛型变量的地方全部替换成传输的真实数据类型。
2.泛型方法
定义方法时同时定义了泛型的方法,就是泛型方法。
泛型方法的格式:[访问权限] <泛型标识> 返回值类型 方法名称 (泛型标识 参数名称)
范例:public <T> void show(T t){}
代码如下(示例):
//将数组转化为字符串并输出
public class dem2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Integer[] arr= {1,2,3,5}; //整型数组
Double[] dou= {1.2,2.3}; //Double型数组
putArray(arr);
putArray(dou);
}
public static <T> void putArray(T[] t) {
StringBuilder str=new StringBuilder();
str.append("[");
for (int i=0;i<t.length;i++) {
str.append(t[i]).append(i==t.length-1? "":",");
}
str.append("]");
System.out.println(str);
}
}
}
结果:
[1,2,3,5]
[1.2,2.3]
***作用:***方法中可以使用泛型接受一切。
3.泛型接口
使用泛型定义的接口就是泛型接口;
泛型接口的格式:[访问权限] interface 接口名称<泛型标识>{}
范例:public interface Data<T>{}
代码如下(示例):
import java.util.ArrayList;
import java.util.List;
interface car1<T>{
void show (T t);
}
class car implements car1<car>{
private String carName;
public car() {
super();
}
public car(String carName) {
this.carName = carName;
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public void show (car c) {
System.out.println(c.getCarName());
}
}
public class dem {
public static void main(String[] args) {
// TODO 自动生成的方法存根
List<car> lists=new ArrayList<>();
lists.add(new car("玛莎拉蒂"));
lists.add(new car("五菱宏光"));
for (car car : lists) {
car.show(car);
}
}
}
结果:
玛莎拉蒂
五菱宏光
***作用:***泛型接口可以让实现类选择当前功能需要操作的数据类型。泛型接口可以约束实现类,实现类可以在实现接口的时候传入自己操作的数据类型这样可以重写的方法都是针对该类型的操作。