一、什么是泛型
泛型是一种为了提高代码通用性和复用性的代码格式,它允许我们在编写类或方法、接口时不需要指定详细的数据类型,先用一个占位符代替。在平时开发中接触的泛型一般就是需要封装某个工具类时,如在统一前后端返回格式的时候,定义一个泛型类,允许传递不同的数据类型返回给前端。
代码参考如下:
public class Result<T> {
/**
* 状态码
*/
public int code;
/**
* 提示信息
*/
private String msg;
/**
* 返回的数据
*/
private T data;
public Result<T> setCode(RetCode retCode) {
this.code = retCode.code;
return this;
}
public int getCode() {
return code;
}
public Result<T> setCode(int code) {
this.code = code;
return this;
}
public String getMsg() {
return msg;
}
public Result<T> setMsg(String msg) {
this.msg = msg;
return this;
}
public T getData() {
return data;
}
public Result<T> setData(T data) {
this.data = data;
return this;
}
}
二、泛型的分类
- 泛型类
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
T是一个类型参数,可以被任何类型替代。使用这个类时,可以指定具体的类型:
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String content = stringBox.getContent();
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
Integer number = integerBox.getContent();
- 泛型方法
public class Util {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
}
使用泛型方法时,可以传入任何类型的数组:
String[] stringArray = {"Hello", "World"};
Integer[] intArray = {1, 2, 3};
Util.printArray(stringArray);
Util.printArray(intArray);
- 泛型接口
public interface Pair<K, V> {
K getKey();
V getValue();
}
实现泛型接口时,可以指定具体的类型:
public class OrderedPair<K, V> implements Pair<K, V> {
private K key;
private V value;
public OrderedPair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
}
三、注意事项
Java中的泛型在编译时会进行类型擦除,这意味着泛型类型在运行时被替换为它们的非泛型超类型。例如,List在编译后会被替换为List。所以不能 创建泛型类型的实例或使用基本类型作为泛型参数。
还有就是要注意,泛型里面传递的参数类型不能是基本数据类型,要是对象或者包装类。