コード例 #1
0
ファイル: FieldAdaptor.java プロジェクト: OuZhencong/ztask
 /**
  * 修改 get 后的值,以便修改查询的 DBObject
  *
  * @param val get 后的值
  * @return 修改 get 后的值,这个值是 ejecting 从对象中取出的
  */
 public Object adaptForFormatQuery(Object val) {
   if (null == val) return null;
   //
   Mirror<?> vMirror = Mirror.me(val.getClass());
   // 如果值为 Map,且自己的类型不是 Map,那么就是深入修改 Map 的各个修改器的键 ...
   if (vMirror.isMap() && !field.getMirror().isMap()) {
     final Map<String, Object> map = new HashMap<String, Object>();
     Lang.each(
         val,
         true,
         new Each<Map.Entry<String, Object>>() {
           public void invoke(int index, Entry<String, Object> ele, int length) {
             String key = ele.getKey();
             if (null != key && key.startsWith("$")) {
               map.put(key, adaptForFormatQuery(ele.getValue()));
             }
           }
         });
     return map;
   }
   // 如果值为集合或者数组, 且自己不为集合或者数组,则生成个新数组返回
   else if (vMirror.isContainer() && !field.getMirror().isContainer()) {
     int len = Lang.length(val);
     final Object array = Array.newInstance(Object.class, len);
     Lang.each(
         val,
         false,
         new Each<Object>() {
           public void invoke(int index, Object o, int length) {
             Array.set(array, index, adaptForFormatQuery(o));
           }
         });
     return array;
   }
   return adaptForGet(val, false);
 }