获取方法泛型
获取方法泛型
public class Demo { public static void main(String[] args) throws NoSuchMethodException, NoSuchFieldException { // 获取成员方法返回值的泛型类型信息 getMethodReturnValueGeneric(); System.out.println("======================================"); // 获取成员变量的泛型类型信息 getMemberVariablesGeneric(); System.out.println("======================================"); // 获取成员方法参数的泛型类型信息 getMethodParametricGeneric(); } /** * 获取方法返回值的泛型类型信息 * * @throws NoSuchMethodException */ public static void getMethodReturnValueGeneric() throws NoSuchMethodException { // 获取名为"getList"的方法,在MyClass类中 Method getListMethod = MyClass.class.getMethod("getList"); // 获取返回值类型,getGenericReturnType()会返回值带有泛型的返回值类型 Type genericReturnType = getListMethod.getGenericReturnType(); // 但我们实际上需要获取返回值类型中的泛型信息,所以要进一步判断,即判断获取的返回值类型是否是参数化类型ParameterizedType if (genericReturnType instanceof ParameterizedType) { // 如果要使用ParameterizedType中的方法,必须先强制向下转型 ParameterizedType type = (ParameterizedType) genericReturnType; // 获取返回值类型中的泛型类型,因为可能有多个泛型类型,所以返回一个数组 Type[] actualTypeArguments = type.getActualTypeArguments(); // 循环数组,遍历每一个泛型类型 for (Type actualTypeArgument : actualTypeArguments) { Class typeArgClass = (Class) actualTypeArgument; System.out.println("成员方法返回值的泛型信息:" + typeArgClass); } } } /** * 获取类中成员变量的泛型类型信息 * * @throws NoSuchFieldException */ public static void getMemberVariablesGeneric() throws NoSuchFieldException { // 获取MyTestClass类中名为"list"的字段 Field listField = MyClass.class.getField("list"); // 获取该字段的类型信息,getGenericType()方法能够获取带有泛型的类型信息 Type genericType = listField.getGenericType(); // 但我们实际上需要获取返回值类型中的泛型信息,所以要进一步判断,即判断获取的返回值类型是否是参数化类型ParameterizedType if (genericType instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) genericType; // 获取成员变量的泛型类型信息 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); for (Type actualTypeArgument : actualTypeArguments) { Class fieldArgClass = (Class) actualTypeArgument; System.out.println("成员变量的泛型信息:" + fieldArgClass); } } } /** * 获取方法参数的泛型类型信息 * * @throws NoSuchMethodException */ public static void getMethodParametricGeneric() throws NoSuchMethodException { // 获取MyTestClass类中名为"setList"的方法 Method setListMethod = MyClass.class.getMethod("setList", List.class); // 获取该方法的参数类型信息(带有泛型) Type[] genericParameterTypes = setListMethod.getGenericParameterTypes(); // 但我们实际上需要获取返回值类型中的泛型信息,所以要进一步判断,即判断获取的返回值类型是否是参数化类型ParameterizedType for (Type genericParameterType : genericParameterTypes) { ParameterizedType parameterizedType = (ParameterizedType) genericParameterType; // 获取成员方法参数的泛型类型信息 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); for (Type actualTypeArgument : actualTypeArguments) { Class realType = (Class) actualTypeArgument; System.out.println("成员方法参数的泛型信息:" + realType); } } } } /*打印结果: 成员方法返回值的泛型信息:class java.lang.Object ====================================== 成员变量的泛型信息:class java.lang.Object ====================================== 成员方法参数的泛型信息:class java.lang.Object */
原文链接:https://blog.csdn.net/cnds123321/article/details/119655880
分类:
反射
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本