事情是这样的:我在网上整了一个List转List《Map》的方法,具体方法是这样的:
public <T> List<Map<String,Object>> listConvert1(List<T> list){
List<Map<String,Object>> list_map=new ArrayList<Map<String,Object>>();
try {
for (T t : list) {
Field[] fields=t.getClass().getDeclaredFields();
Map<String, Object> m = new HashMap<String, Object>();
for(Field field:fields){
String keyName=field.getName();
PropertyDescriptor pd = new PropertyDescriptor(keyName,t.getClass());
Method getMethod = pd.getReadMethod();// 获得getter方法
Object o = getMethod.invoke(t);// 执行get方法返回一个Object
m.put(keyName, o);
}
list_map.add(m);
}
return list_map;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
然而在我使用的时候 给我爆出了异常,
java.beans.IntrospectionException: Method not found: isSerialVersionUID
at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:106)
at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:70)
巴拉巴拉···大致上就是这样,当我查看错误代码的时候,直接给我跳到了
PropertyDescriptor pd = new PropertyDescriptor(keyName,t.getClass()); 这一行。
在网上找了很多关于这样的问题都是无济于事,到底是哪里出了错那? 因为本人是个小白所以这算是一个非常头疼的问题了,大佬们如果有什么解决方法,不妨说一下,万分感谢。
IntrospectionException
内省时发生异常时抛出。
典型的原因包括无法将字符串类名称映射到Class对象,无法解析字符串方法名称,或指定其预期用途具有错误类型签名的方法名称。
Method not found: isSerialVersionUID 找不到方法:isSerialVersionUID
PropertyDescriptor这个类的106行代码是啥,你这只能看出错误地方,具体哪错了看不到你代码
这是因为没有找到对应成员变量的 getter
方法
你调用方法时传入的 list
参数里的bean是不是实现了 Serializable
接口,而且已经赋值了 serialVersionUID
属性?
serialVersionUID
是为了在对象序列化时检查是否一致时用到的,一般也不需要提供getter方法,提供了也没啥问题
如果不需要序列化可以不实现 Serializable
接口
这个方法使用了 getReadMethod()
获取对应属性的 getter
方法并调用的方式获取对应值,所以容易出现这种问题
或者你可以直接使用反射获取属性值,但这样又容易获取到一些不对外提供的数据
或者捕获这个异常,然后跳过没有getter方法的属性继续执行
或者没什么需要的话直接不实现 Serializable
接口,但是你的实体类如果还有其他类似属性的话还是会出现问题
https://blog.csdn.net/meetbetterhc/article/details/106299212