Common 常用模块

Date 日期处理

Reflection 反射

Input/Output 输入/输出

HTTP 请求

加密/解密

其他

Types

Types 类提供了检索泛型类型信息、转换类型以及处理参数化类型的方法。这些方法有助于在运行时高效、方便地操作 Java 类型。

type2class(Type) 支持所有标准反射 Type 实现。类型变量通过唯一上界解析;上界通配符和无界通配符 通过唯一上界解析;泛型数组会先解析组件类型。下界通配符或多个上界不能确定唯一类,因此会抛出 IllegalArgumentException

方法

1. getActualType(Type type)

检索参数化类型的实际类型参数。

示例:

Type type = new ParameterizedType() {
    @Override
    public Type[] getActualTypeArguments() {
        return new Type[]{String.class};
    }

    @Override
    public Type getRawType() {
        return List.class;
    }

    @Override
    public Type getOwnerType() {
        return null;
    }
};
Type[] actualType = Types.getActualType(type);
// actualType 将包含 String.class

2. getGenericReturnType(Method method)

检索方法返回类型的实际类型参数。

示例:

Method method = TestTypes.class.getMethod("getList2");
Type[] actualType = Types.getGenericReturnType(method);
// actualType 将包含方法的泛型返回类型

3. getGenericFirstReturnType(Method method)

检索方法返回类型的第一个实际类型参数并将其转换为 Class

示例:

Method method = TestTypes.class.getMethod("getList2");
Class<?> actualType = Types.getGenericFirstReturnType(method);
// actualType 将是方法的第一个泛型返回类型,作为 Class

4. getActualType(Class<?> clz)

检索类的超类的实际类型参数。

示例:

Type[] actualType = Types.getActualType(ArrayList.class);
// actualType 将包含 ArrayList 超类的泛型类型参数

5. getActualClass(Class<?> clz)

检索类的超类的第一个实际类型参数并将其转换为 Class

示例:

class StringList extends ArrayList<String> {
}

Class<?> actualClass = Types.getActualClass(StringList.class);
// String.class

Types.getActualClass(String.class);
// 抛出 IllegalArgumentException,不再发生 NullPointerException

6. type2class(Type type)

按照以下规则将 Type 转换为 Class

示例:

Type type = String.class;
Class<?> actualClass = Types.type2class(type);
// actualClass 将是 String.class

class Example {
    List<String> names;
}

Type listType = Example.class.getDeclaredField("names").getGenericType();
Class<?> rawClass = Types.type2class(listType);
// 如果字段声明为 List<String>,rawClass 将是 List.class