现在的位置: 首页 > 综合 > 正文

BeanMap 使用。。。。

2012年01月04日 ⁄ 综合 ⁄ 共 1233字 ⁄ 字号 评论关闭
文章目录

BeanMap

相比于BeanCopier,BulkBean,都是针对两个Pojo Bean进行处理,那如果对象一个是Pojo Bean和Map对象之间,那就得看看BeanMap,将一个java bean允许通过map的api进行调用。
几个支持的操作接口:

  • Object get(Object key)
  • Object put(Object key, Object value)
  • void putAll(Map t)
  • Set entrySet()
  • Collection values()
  • boolean containsKey(Object key)
  • ....
public class BeanMapTest {  
  
    public static void main(String args[]) {  
        // 初始化  
        BeanMap map = BeanMap.create(new Pojo());  
        // 构造  
        Pojo pojo = new Pojo();  
        pojo.setIntValue(1);  
        pojo.setBigInteger(new BigInteger("2"));  
        // 赋值  
        map.setBean(pojo);  
        // 验证  
        System.out.println(map.get("intValue"));  
        System.out.println(map.keySet());  
        System.out.println(map.values());  
    }  
}  
  
class Pojo {  
  
    private int        intValue;  
    private BigInteger bigInteger;  
    ....  
}  
  
//反编译代码查看:  
//首先保存了所有的属性到一个set中  
private static FixedKeySet keys = new FixedKeySet(new String[] {  
        "bigInteger", "intValue"  
    });  
public Object get(Object obj, Object obj1)  
    {  
        (Pojo)obj;  
        String s = (String)obj1;  
        s;  
        s.hashCode();  
        JVM INSTR lookupswitch 2: default 72  
    //                   -139068386: 40  
    //                   556050114: 52;  
           goto _L1 _L2 _L3  
_L2:  
        "bigInteger";  
 //属性判断是否相等  
        equals();  
        JVM INSTR ifeq 73;  
           goto _L4 _L5  
_L5:  
        break MISSING_BLOCK_LABEL_73;  
_L4:  
        getBigInteger();  
        return;  
_L3:  
  
....  
  
}  

 

 

 

使用注意

  1. 避免每次进行BeanMap map = BeanMap.create();创建对象,不同于BeanCopier对象,BeanMap主要针对对象实例进行处理,所以一般建议是map.setBean(pojo);进行动态替换持有的对象实例。
  2. 应用场景:针对put,putAll操作会直接修改pojo对象里的属性,所以可以通过beanMap.putAll(map)进行map<->pojo属性的拷贝。

 

抱歉!评论已关闭.