示例#1
0
文件: Mirror.java 项目: jekey/nutz
    public Class<?>[] extract(Mirror<?> mirror) {
      Class<?> theType = mirror.getType();
      List<Class<?>> re = new ArrayList<Class<?>>(5);

      // 原生类型,增加其外覆类
      if (theType.isPrimitive()) {
        re.add(mirror.getWrapperClass());
        // 数字
        if (theType != boolean.class && theType != char.class) {
          re.add(Number.class);
        }
      }
      // 日历
      else if (mirror.isOf(Calendar.class)) {
        re.add(Calendar.class);
      }
      // 其他类型,直接增加,并试图判断其抽象类
      else {
        re.add(theType);
        // 枚举
        if (mirror.klass.isEnum()) {
          re.add(Enum.class);
        }
        // 数组
        else if (mirror.klass.isArray()) {
          re.add(Array.class);
        }
        // 字符串
        else if (mirror.isStringLike()) re.add(CharSequence.class);
        // 数字
        else if (mirror.isNumber()) {
          re.add(Number.class);
        }
        // Map
        else if (mirror.isOf(Map.class)) {
          re.add(Map.class);
        }
        // 列表
        else if (mirror.isOf(List.class)) {
          re.add(List.class);
          re.add(Collection.class);
        }
        // 集合
        else if (mirror.isOf(Collection.class)) {
          re.add(Collection.class);
        }
      }
      // 最后确保 Object 一定被加上了
      if (theType != Object.class) re.add(Object.class);

      return re.toArray(new Class<?>[re.size()]);
    }