map裝換為javabean物件時,有一個欄位是一個列舉型別UserIdentityType,就轉不去了,請問這個要怎么解決?
public class DamiUser extends BaseModel {
/*主鍵名稱*/
public final String KEY_NAME = "DamiUser";
/*用戶Id*/
private String userId;
/*用戶標識型別*/
private UserIdentityType userIdentity;
/*用戶標識號碼*/
private String userIdentityNo;
/*創建時間*/
private String creationTime;
}
/**
* @Description: 將map裝換為javabean物件
* @Author: Administrator
* @DateTime: 2020/9/5 15:01
* @Params: 待轉換的Map
* @Return: Bean物件
*/
public static <T> T mapToBean(Map<String, Object> map, T bean) throws Exception {
BeanMap beanMap = null;
try {
beanMap = BeanMap.create(bean);
beanMap.putAll(map);
} catch (Exception e) {
throw new Exception(e);
}
return bean;
}
Exception in thread "main" java.lang.Exception: java.lang.ClassCastException: java.lang.String cannot be cast to com.jhjk.dami.enmu.UserIdentityType
at com.jhjk.dami.utils.SysUtil.mapToBean(SysUtil.java:139)
at com.jhjk.dami.MainTests.mapToBean(MainTests.java:64)
at com.jhjk.dami.MainTests.main(MainTests.java:49)
uj5u.com熱心網友回復:
那就自己封裝一個方法好了,反正也不難public class Sample {
static enum EnumTest {
One, Tow, Three;
}
static class TestBean {
private String name;
private EnumTest et;
public String toString() {
return String.format("name: %s, et: %s", name, et);
}
}
public static <T> T mapToBean(Map<String, Object> map, T bean) throws Exception { //自己封裝方法,利用反射設定bean的屬性
Class<?> cls = bean.getClass();
try {
for(Field f : cls.getDeclaredFields()) {
if (map.containsKey(f.getName())) {
f.setAccessible(true);
if (f.getType().isEnum()) { //如果是enum型別
Object obj = null;
for(Object o : f.getType().getEnumConstants()) { //取出所有的enum值和map的值對比
if (o.toString().equals(map.get(f.getName()))) { //對比相同則保存相應的enum
obj = o;
break;
}
}
f.set(bean, obj); //設定bean的enum屬性
} else {
f.set(bean, map.get(f.getName()));
}
}
}
} catch (Exception e) {
throw new Exception(e);
}
return bean;
}
public static void main(String[] args) {
try {
Map<String, Object> map = new HashMap<>();
map.put("name", "test");
map.put("et", "Tow");
TestBean tb = new TestBean();
mapToBean(map, tb);
System.out.println(tb);
} catch (Throwable e) {
e.printStackTrace();
}
}
}轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/188035.html
標籤:Java相關
