反射时获取 method 里面 List<Object> 里面的具体类型 (正则获取括号内的内容)

反射时获取 method 里面 List<Object> 里面的具体类型

一、 介绍

我们正常反射 获取方法Method 里面的 参数类型, 但是 如果参数是 List , 只能拿到List, 获取不到对应的Object 是什么类型,这里是 泛型语法糖 ,思路如下:

class --->> .getMethod() --->> Method.getParameters() --->> parameter.getDeclaringExecutable().toGenericString(); --->> 获取 到接口的的字符串
//这里是获取全部 路径 ,这是我测试接口
 public abstract void com.test.common.dao.insertEntity(java.util.List<com.test.common.entity.TestEntity>)
--->>> 通过正则 过滤出括号里面的
java.util.List<com.test.common.entity.TestEntity> 
--->>com.test.common.entity.TestEntity    --->> class.forName()    --->> Clazz.newInstance()

 
 
 

接下来通过正则 获取 括号里面的 参数,具体方法就不放了.

给个获取的正则demo:

    public static void main(String[] args) {
        String str ="public abstract void com.test.common.dao.insertEntity(java.util.List<com.test.common.entity.TestEntity>)";
        Matcher matcher = Pattern.compile("(?<=\\()(\\S+)(?=\\))").matcher(str);
        if (matcher.find()) {
            String value = matcher.group();
            System.out.println(value);
        }
    }

输出: java.util.List<com.test.common.entity.TestEntity>
在这里插入图片描述

二、小结

记录一下,其实很简单,当时第一时刻没有拿到里面的具体类型.

支付宝微信
支付宝微信
如果有帮助记得打赏哦特别需要您的打赏哦
### 回答1: 在Java语言,实现将List<Object>转化为List<Map<Object, Object>>的工具类可以按以下步骤进行: 1. 定义工具类:首先,我们可以创建一个工具类,用于将List<Object>转化为List<Map<Object, Object>>,可以将其命名为ListObject2MapUtil。 2. 编写转换方法:在工具类,我们可以定义一个静态方法convertToListMap,方法参数为List<Object>,返回类型List<Map<Object, Object>>。在方法,我们可以遍历传入的List<Object>,将每个对象转化为Map<Object, Object>类型,并将转换后的Map添加到返回的List。 3. 实现转换逻辑:在转换方法,我们可以先判断传入的List<Object>是否为空,若为空,则直接返回空的List<Map<Object, Object>>;否则,我们遍历List<Object>的每个对象,对于每个对象,再将其转化为Map<Object, Object>类型。可以通过反射机制获取对象的所有属性名和值,然后将属性名作为Map的key,属性值作为value,最后将Map添加到返回的List。 4. 处理异常:在进行转换的过程,可能会发生一些异常,如转换失败、空指针异常等。因此,我们可以在转换方法增加一些异常处理的代码,例如,当对象转化为Map类型出现异常,可以将该对象添加到一个“无法转化的对象List,并在方法结束返回包含转化的Map和无法转化的对象List的Map集合。这样可以方便用户查找转换失败的原因。 综上所述,实现将List<Object>转化为List<Map<Object, Object>>的工具类,需要以下步骤:定义工具类、编写转换方法、实现转换逻辑、处理异常。最后,还需要对工具类进行测试,确保转换结果符合预期。 ### 回答2: 在开发过程,我们经常会遇到需要将一个对象列表转换成一个键值对列表的情况。Java提供了灵活的方式来满足这种需求。Java有两种常用的方式来实现List<Object>转List<Map<String,Object>>的工具类,下面将对这两种方式进行介绍。 方式一:使用Java8 Stream API Java8 Stream API提供了非常方便的转换方式。通过使用Java8 Stream API,可以轻松实现List<Object>转List<Map<String,Object>>的转换操作。下面是一段示例代码: ```java public static List<Map<String,Object>> convertObjectListToListMap(List<Object> objList){ List<Map<String,Object>> mapList = objList.stream().map(e -> { BeanMap beanMap = new BeanMap(e); Map<String,Object> map = new HashMap<>(); beanMap.forEach((k,v) ->{ map.put(k.toString(), v); }); return map; }).collect(Collectors.toList()); return mapList; } ``` 这段代码使用了Java8 Stream API的map函数,首先将对象转换成BeanMap对象,然后将其转换成Map对象。在转换过程,遍历BeanMap的所有属性,并将其转换成Map对象。最后,将所有的Map对象收集到List返回即可。 方式二:使用第三方库BeanUtils 第三方库BeanUtils提供了非常方便的JavaBean属性拷贝方式,通过使用BeanUtils,可以轻松实现List<Object>转List<Map<String,Object>>的转换操作。下面是一段示例代码: ```java public static List<Map<String,Object>> convertObjectListToListMap(List<Object> objList){ List<Map<String,Object>> mapList = new ArrayList<>(); for(Object obj : objList){ Map<String,Object> map = new HashMap<>(); try { map = BeanUtils.describe(obj); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } mapList.add(map); } return mapList; } ``` 这段代码使用了BeanUtils.describe方法,该方法JavaBean对象转换成Map对象。在转换过程,会利用JavaBean的get方法遍历所有属性,并将其转换成Map对象。最后,将所有的Map对象添加到List返回即可。 总结 使用Java8 Stream API和BeanUtils两种方式都能够实现List<Object>转List<Map<String,Object>>的转换操作。使用Java8 Stream API的代码更加简洁,但是使用BeanUtils的代码更加清晰易懂。根据实际情况,选择适合自己的方式即可。 ### 回答3: List<Object>转List<Map>的工具类可以帮助我们将一个包含不同类型Object元素的集合转换成Map元素的集合。这种转换通常用于将从数据库等数据源得到的数据转换为前端需要的数据格式,并进行数据绑定、渲染等操作。 实现List<Object>转List<Map>的工具类需要用到Java反射机制和Java泛型机制,主要包括以下步骤: 1. 创建工具类,包括构造方法和转换方法: public class ObjectToMapUtils { private ObjectToMapUtils() {} public static List<Map<String, Object>> convert(List<Object> list) { List<Map<String, Object>> result = new ArrayList<>(); for (Object obj : list) { Map<String, Object> map = new HashMap<>(); try { Class<?> clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } } catch (IllegalAccessException e) { e.printStackTrace(); } result.add(map); } return result; } } 在此例,我们封装了一个ObjectToMapUtils类来完成List<Object>转List<Map>的操作。其,convert()方法接收一个List<Object>类型的参数,遍历其的每一个元素,使用反射获取元素的成员变量和成员方法,通过Map<String, Object>存储转换后的结果,并将结果添加到结果集。 2. 在方法对元素进行类型判断和转换: public static List<Map<String, Object>> convert(List<Object> list) { List<Map<String, Object>> result = new ArrayList<>(); for (Object obj : list) { Map<String, Object> map = new HashMap<>(); try { Class<?> clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); Object value = field.get(obj); if (value instanceof Date) { value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) value); } map.put(field.getName(), value); } } catch (IllegalAccessException e) { e.printStackTrace(); } result.add(map); } return result; } 在例子,我们在遍历每个元素的成员变量,添加了类型判断的代码。例如,如果成员变量是一个Date类型的对象,我们就将其转换为String类型间戳,提高代码的健壮性和可读性。 通过这种方式,我们就可以搭建一个简单的工具类,实现List<Object>转List<Map>的操作,便于数据转换和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直打铁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值