泛型 Generics

Author: Corissa

Date: Dec.31 2023 🎆

1
ArrayList<E> extends AbstractList<E>

编译器可以对泛型参数进行检测,通过泛型参数可以指定传入对象的类型

1 分类

泛型类,泛型接口,泛型方法

1.1 泛型类

在实例化泛型时,必须指定具体类型

1
2
3
4
5
6
7
8
9
10
11
12
13
// 泛型类
public class Generic<T>{
private T key;
public Generic(T key) {
this.key = key;
}
public T getKey(){
return key;
}
}

// 实例化
Generic<Character> generic = new Generic<Character>();
1.2 泛型接口

泛型接口在子类实现时,可以选择实现或者不实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 泛型接口
public interface Generic<T>{
private T genericMethod();
}

// 实现1
class GeneratorImpl<T> implements Generator<T>{
@Override
public T genericMethod() {
return null;
}
}

// 实现2
class GeneratorImpl<T> implements Generator<String>{
@Override
public String genericMethod() {
return "genericMethod";
}
}
1.3 泛型方法
1
2
3
4
5
6
7
8
9
10
11
12
public static < E > void printArray( E[] inputArray )
{
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}

Integer[] intArray = { 1, 2, 3 };
String[] stringArray = { "Hello", "World" };
printArray( intArray );
printArray( stringArray );

2 项目中如何使用泛型

  • 自定义通用返回结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class ResponseResult <T> {
    private T result;
    public ResponseResult(T result) {
    this.result = result;
    }
    public T getResult() {
    return result;
    }
    public void setResult(T result) {
    this.result = result;
    }
    }
  • 构建集合工具类(包括 Java 源代码中很多方法的构建)。

  • 定义 Excel 处理类 ExcelUtil<T> 用于动态指定 Excel 导出的数据类型