0.使用场景
1
| List<Map<String,Object>> users = (List<Map<String,Object>>) Obj;
|
使用的时候IDEA会提示警告 说未检查类型.
1.解决办法
- 使用@SuperWarning({“unchecked”})进行压制
- 写个工具类进行转换
1.1 方法1
1 2
| @SuperWarning({"unchecked"}) List<User> users = (List<User>) Obj;
|
1.2 方法2
写的时候参考了我的 Object 转换 List<Object> 的写法,只是说在处理o的时候再次进行了转换获得每个key和value.
写完Object转换List
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public static List<Map<String,Object>> objConvertListMap(Object obj) throws IllegalAccessException { List<Map<String,Object>> result = new ArrayList<>(); if (obj instanceof List<?>){ for (Object o : (List<?>) obj) { Map<String,Object> map = new HashMap<>(16); Class<?> clazz = o.getClass(); for (Field field : clazz.getDeclaredFields()) { field.setAccessible(true); String key = field.getName(); Object value = field.get(key); if (value == null){ value = ""; } map.put(key,value); } result.add(map); } return result; } return null; }
|
写完博文几分钟后,突然想到一个更加通用的写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public static <V> List<Map<String,V>> objConvertListMap(Object obj, Class<V> vClass) throws IllegalAccessException { List<Map<String, V>> result = new ArrayList<>(); if (obj instanceof List<?>) { for (Object o : (List<?>) obj) { Map<String, V> map = new HashMap<>(16); Class<?> oClass = o.getClass(); for (Field field : oClass.getDeclaredFields()) { field.setAccessible(true); String key = field.getName(); Object value = field.get(key); if (value == null) { value = ""; } map.put(key, vClass.cast(value)); } result.add(map); } return result; } return null; }
|
这样就不会局限在转换到List<Map<String,Object>>这一种类型上了.
可以转换成List<Map<String,V>>上等,进行泛型转换
虽然多了一个参数,但是可以重载啊
注: 感觉field.get(key) 这里处理的不是很好,如果有更好的办法可以留言
1.3 方法3(感谢 凌霄。 大佬提供)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public static <K, V> List<Map<K, V>> castListMap(Object obj, Class<K> kCalzz, Class<V> vCalzz) { List<Map<K, V>> result = new ArrayList<>(); if (obj instanceof List<?>) { for (Object mapObj : (List<?>) obj) { if (mapObj instanceof Map<?, ?>) { Map<K, V> map = new HashMap<>(16); for (Map.Entry<?, ?> entry : ((Map<?, ?>) mapObj).entrySet()) { map.put(kCalzz.cast(entry.getKey()), vCalzz.cast(entry.getValue())); } result.add(map); } } return result; } return null; }
|
注:
个人不喜欢使用注解消除警告,因为觉得这个消除了,但是仍然存在隐患. 所以选择使用静态方法进行转换. 结果可控.