泛型类型工具类 - TypeUtil
# 泛型类型工具类 - TypeUtil
简介
TypeUtil
是 Hutool 提供的一个针对 java.lang.reflect.Type
的工具类,用于处理 Java 中的泛型类型。它可以帮助开发者获取方法的参数和返回值类型,以及泛型参数的具体类型,使得泛型类型的处理更加便捷。
# 1. 获取方法参数的泛型类型
TypeUtil
提供了 getParamType
方法,用于获取方法参数的泛型类型。
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.TypeUtil;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
public class TypeUtilExample {
public static void main(String[] args) {
// 获取 TestClass 中 intTest 方法的参数类型
Method method = ReflectUtil.getMethod(TestClass.class, "intTest", Integer.class);
// 获取方法参数的泛型类型
Type paramType = TypeUtil.getParamType(method, 0);
// 输出类型信息
System.out.println("方法参数的泛型类型: " + paramType.getTypeName());
}
}
// 示例类,用于演示泛型类型操作
class TestClass {
public Integer intTest(Integer integer) {
return 1;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
getParamType(Method method, int index)
:获取方法参数的泛型类型。method
:目标方法。index
:参数在方法中的位置,从 0 开始。- 返回值:方法参数的泛型类型。
作用: 获取方法参数的具体类型,适用于泛型方法的参数类型推断。
实际开发场景: 当需要对泛型方法的参数进行类型检查或推断时,可以使用此方法。
# 2. 获取方法的返回值类型
TypeUtil
提供了 getReturnType
方法,用于获取方法的返回值类型。
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.TypeUtil;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.List;
public class TypeUtilExample {
public static void main(String[] args) {
// 获取 TestClass 中 getList 方法的返回值类型
Method method = ReflectUtil.getMethod(TestClass.class, "getList");
// 获取方法的返回值类型
Type returnType = TypeUtil.getReturnType(method);
// 输出返回值类型信息
System.out.println("方法的返回值类型: " + returnType.getTypeName());
}
}
// 示例类,用于演示泛型类型操作
class TestClass {
public List<String> getList() {
return new ArrayList<>();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
getReturnType(Method method)
:获取方法的返回值类型。method
:目标方法。- 返回值:方法的返回值类型。
作用: 获取方法的返回值类型信息,尤其适用于泛型方法的返回值类型推断。
实际开发场景: 在需要根据方法的返回值类型进行逻辑处理时,可以使用此方法。
# 3. 获取泛型类子类中泛型的填充类型
TypeUtil
提供了 getTypeArgument
方法,用于获取泛型类子类中泛型的具体类型。
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.TypeUtil;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.List;
public class TypeUtilExample {
public static void main(String[] args) {
// 获取 TestClass 中 getList 方法的返回值类型
Method method = ReflectUtil.getMethod(TestClass.class, "getList");
Type returnType = TypeUtil.getReturnType(method);
// 获取泛型类子类中泛型的填充类型
Type typeArgument = TypeUtil.getTypeArgument(returnType);
// 输出泛型类型信息
System.out.println("泛型的填充类型: " + typeArgument.getTypeName());
}
}
// 示例类,用于演示泛型类型操作
class TestClass {
public List<String> getList() {
return new ArrayList<>();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
getTypeArgument(Type type)
:获取泛型类子类中泛型的填充类型。type
:目标泛型类型。- 返回值:泛型的填充类型。
作用: 获取泛型类型的实际类型参数,适用于泛型类型的进一步分析。
实际开发场景: 在需要处理泛型类型的实际参数类型时,可以使用此方法。
# 4. 获取 Type 对应的原始类
TypeUtil
提供了 getClass
方法,用于获取 Type
对应的原始类。
import cn.hutool.core.util.TypeUtil;
import java.lang.reflect.Type;
import java.util.List;
public class TypeUtilExample {
public static void main(String[] args) {
// 定义一个泛型列表
List<String> list = new ArrayList<>();
// 获取泛型列表的类型
Type type = list.getClass().getGenericSuperclass();
// 获取 Type 对应的原始类
Class<?> rawClass = TypeUtil.getClass(type);
// 输出原始类名称
System.out.println("Type 对应的原始类: " + rawClass.getName());
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
getClass(Type type)
:获取Type
对应的原始类。type
:目标Type
类型。- 返回值:
Type
对应的原始类。
作用: 将
Type
类型转换为对应的原始类,便于进行进一步的类型操作。实际开发场景: 在需要获取泛型类型的实际原始类时,可以使用此方法。
总结
TypeUtil
工具类在处理泛型类型、方法参数和返回值类型等方面提供了强大且简洁的工具方法。它适用于各种需要动态获取和操作泛型类型的场景,帮助开发者更高效地处理 Java 中的类型系统,提高开发效率。