获取类的泛型
时间: 2023-08-24 11:20:11 浏览: 46
在 Java 中,获取类的泛型参数类型是一个比较常见的需求,可以通过反射的方式来实现。
Hutool 中的 TypeUtil 工具类提供了 `getTypeArgument(Class<?> clazz)` 方法来获取一个类的泛型参数类型,该方法返回一个 Type 类型的数组,每个元素表示一个泛型参数的类型。
例如,对于以下的类定义:
```java
public class MyList<T, E> {
// ...
}
```
我们可以通过 TypeUtil 来获取 MyList 类的泛型参数类型:
```java
Class<?> clazz = MyList.class;
Type[] types = TypeUtil.getTypeArgument(clazz);
System.out.println(Arrays.toString(types));
```
输出结果为:
```
[class java.lang.Object, class java.lang.Object]
```
这是因为在没有指定泛型参数类型的情况下,Java 会把泛型参数类型默认为 Object 类型。如果我们指定了泛型参数类型,例如:
```java
MyList<String, Integer> myList = new MyList<>();
```
那么通过 TypeUtil 获取到的泛型参数类型就是 `[class java.lang.String, class java.lang.Integer]`。
需要注意的是,如果一个类没有定义泛型参数类型,或者泛型参数类型在编译时被擦除了,那么通过反射获取泛型参数类型时可能会出现一些问题。