根據(jù)Map對(duì)象的內(nèi)容創(chuàng)建JavaBean

字號(hào):

Java 提供 java.beans.Introspector 類,幫助我們分析 JavaBean 類當(dāng)中有哪些屬性,通過(guò)它可以方便的對(duì) JavaBean 對(duì)象屬性進(jìn)行取值和賦值操作。下面是一個(gè)例子,根據(jù) Map 對(duì)象中的內(nèi)容創(chuàng)建 JavaBean 對(duì)象。
    importjava.beans.BeanInfo;
    importjava.beans.IntrospectionException;
    importjava.beans.Introspector;
    importjava.beans.PropertyDescriptor;
    importjava.util.HashMap;
    importjava.util.Map;
    importjava.lang.reflect.InvocationTargetException;
    publicclassMapToBean{
    publicstaticvoidmain(String[]args)throwsException{
    Mapmap=newHashMap();
    map.put("name","張三");
    map.put("age",30);
    Personp=convertMap(Person.class,map);
    System.out.println(p.getName()+","+p.getAge());
    }
    /**
    *將一個(gè)Map對(duì)象轉(zhuǎn)化為一個(gè)JavaBean
    *
    *@paramtype要轉(zhuǎn)化的類型
    *@parammap 包含屬性值的map
    *
    *@return轉(zhuǎn)化出來(lái)的JavaBean對(duì)象
    *
    *@throwsIntrospectionException如果分析類屬性失敗
    *@throwsIllegalAccessException如果實(shí)例化JavaBean失敗
    *@throwsInstantiationException如果實(shí)例化JavaBean失敗
    *@throwsInvocationTargetException如果調(diào)用屬性的setter方法失敗
    */ 
    privatestaticTconvertMap(Classtype,Mapmap)
    throwsIntrospectionException,IllegalAccessException,
    InstantiationException,InvocationTargetException{
    BeanInfobeanInfo=Introspector.getBeanInfo(type);//獲取類屬性
    Tt=type.newInstance(); //創(chuàng)建JavaBean對(duì)象
    //給JavaBean對(duì)象的屬性賦值
    for(PropertyDescriptordescriptor:beanInfo.getPropertyDescriptors()){
    StringpropertyName=descriptor.getName();
    if(map.containsKey(propertyName)){
    //下面一句可以try起來(lái),這樣當(dāng)一個(gè)屬性賦值失敗的時(shí)候就不會(huì)影響其他屬性賦值。
    descriptor.getWriteMethod().invoke(t,map.get(propertyName));
    }
    }
    returnt;
    }
    }
    classPerson{
    privateStringname;
    privateintage;
    publicStringgetName(){
    returnname;
    }
    publicvoidsetName(Stringname){
    this.name=name;
    }
    publicintgetAge(){
    returnage;
    }
    publicvoidsetAge(intage){
    this.age=age;
    }
    }