java 根据method获取方法的返回值类型

本文介绍了在Java中获取Method方法返回值类型的三种不同途径:第一种通过判断是否为泛型,第二种通过截取字符串并使用反射,第三种是将字符串转换为支持泛型的对象或列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种方法直接根据是否是泛型获取

 
  1. public static Type[] getMethodReturnTypes(Method method) {
  2. List<Type> typeList = new ArrayList<>();
  3. Type type = method.getGenericReturnType(); //判断是否带有泛型
  4. if (type instanceof ParameterizedType) {
  5. typeList.add(((ParameterizedType) type).getRawType());
  6. Type[] actualTypeArguments = ((ParameterizedType) type).getActualTypeArguments();
  7. while (actualTypeArguments.length > 0) {
  8. type = actualTypeArguments[0];
  9. if (type instanceof ParameterizedType) {
  10. typeList.add(((ParameterizedType) type).getRawType());
  11. actualTypeArguments = ((ParameterizedType) type).getActualTypeArguments();
  12. } else {
  13. typeList.add(type);
  14. break;
  15. }
  16. }
  17. } else {
  18. typeList.add(type);
  19. }
  20. return typeList.toArray(new Type[]{});
  21. }

第二种方法 截取字符串 反射获取具体的类

 
  1. public static Type[] getMethodReturnTypes(Method method) {
  2. String generisInfo = method.toGenericString().split(" ")[1];
  3. if (!generisInfo.equals("void")) {
  4. generisInfo = generisInfo.replace(">", "");
  5. String[] arr = generisInfo.split("<");
  6. for (String s : arr) {
  7. try {
  8. Class<?> clazz = Class.forName(s);
  9. list.add(clazz);
  10. } catch (Exception ex) {
  11. throw new RuntimeException(ex);
  12. }
  13. }
  14. }
  15. return list.toArray(new Type[]{});
  16. }

字符串转换成对象 支持泛型,列表等

 
  1. /**
  2. * 字符串转换成对象 支持多级转换以及泛型等 比如 UCRoot<List<Hospital>> 、List<Hospital> 等
  3. * eg:
  4. *
  5. * @param jsonStr
  6. * @param types
  7. * @return
  8. */
  9. public static Object parseObject(String jsonStr, Type[] types) {
  10. if (isBlank(jsonStr) || ArrayUtils.isEmpty(types)) {
  11. return null;
  12. }
  13. if (types.length == 1) {
  14. if (jsonStr.startsWith("[{")) {
  15. return JSONObject.parseArray(jsonStr, (Class) types[0]);
  16. } else {
  17. return JSONObject.parseObject(jsonStr, types[0]);
  18. }
  19. }
  20. ParameterizedTypeImpl beforeType = null;
  21. if (types != null && types.length > 0) {
  22. for (int i = types.length - 1; i > 0; i--) {
  23. beforeType = new ParameterizedTypeImpl(new Type[]{beforeType == null ? types[i] : beforeType}, null, types[i - 1]);
  24. }
  25. }
  26. return JSONObject.parseObject(jsonStr, beforeType);
  27. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值