method.getreturntype()返回编译时声明的返回类型class对象,如string.getvalue()返回string.class,list.getdata()返回list.class(泛型擦除),void方法返回void.class;需用getgenericreturntype()获取完整泛型信息。

直接调用 Method.getReturnType() 就能获取方法声明的返回值类型,它返回的是一个 Class 对象。
基本用法:直接调用 getReturnType()
该方法返回的是编译时声明的返回类型,不涉及运行时实际返回的对象。比如方法声明为 String getValue(),getReturnType() 就返回 String.class;如果是 List<integer> getData()</integer>,则返回 List.class(注意:泛型信息会被擦除,原始类型是 List)。
- 适用于所有 public、protected、private 方法(只要能通过反射访问到)
- 返回值永远不会为
null,即使方法返回void,也会返回void.class - 若想获取带泛型的完整类型(如
List<integer></integer>),需用Method.getGenericReturnType()配合Type解析
判断 void 返回类型
检查是否为 void 方法,不要用字符串比较或 instanceof,而是直接比对 Class:
if (method.getReturnType() == void.class) {
// 是 void 方法
}
这是最准确、最高效的方式。
处理泛型返回类型(进阶)
如果方法返回泛型类型(如 Map<string user> getMap()</string>),getReturnType() 只返回 Map.class。要获取完整泛型信息,需:
- 调用
method.getGenericReturnType()得到Type实例 - 若它是
ParameterizedType,可强转并获取原始类型和实际类型参数 - 例如:
((ParameterizedType) type).getRawType()得到Map.class,getActualTypeArguments()得到[String.class, User.class](注意:这里仍是Type,需进一步解析)
常见误区提醒
不要混淆 getReturnType() 和 invoke() 的结果:
-
getReturnType()描述“方法承诺返回什么”,是静态元数据 -
method.invoke(...)执行后得到的是实际对象,其运行时 class 可能与声明类型不同(如子类实例、null 值) - 例如声明返回
Number,实际可能返回Integer或Double,但getReturnType()始终是Number.class
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











