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