Exemplo n.º 1
0
  protected ParamInjector evalInjectorBy(Type type, Param param) {
    // TODO 这里的实现感觉很丑, 感觉可以直接用type进行验证与传递
    // TODO 这里将Type的影响局限在了 github issue #30 中提到的局部范围
    Class<?> clazz = Lang.getTypeClass(type);
    if (clazz == null) {
      if (log.isWarnEnabled())
        log.warnf("!!Fail to get Type Class : type=%s , param=%s", type, param);
      return null;
    }

    // Map
    if (Map.class.isAssignableFrom(clazz)) return new MapSelfInjector();

    if (null == param) return super.evalInjectorBy(type, null);

    String paramName = param.value();

    // File
    if (File.class.isAssignableFrom(clazz)) return new FileInjector(paramName);
    // FileMeta
    if (FieldMeta.class.isAssignableFrom(clazz)) return new FileMetaInjector(paramName);
    // TempFile
    if (TempFile.class.isAssignableFrom(clazz)) return new TempFileInjector(paramName);
    // InputStream
    if (InputStream.class.isAssignableFrom(clazz)) return new InputStreamInjector(paramName);
    // Reader
    if (Reader.class.isAssignableFrom(clazz)) return new ReaderInjector(paramName);
    // List
    if (List.class.isAssignableFrom(clazz)) return new MapListInjector(paramName);
    if (TempFile[].class.isAssignableFrom(clazz)) {
      return new TempFileArrayInjector(paramName);
    }
    // Other
    return super.evalInjectorBy(type, param);
  }
Exemplo n.º 2
0
 /**
  * 根据Type生成Mirror, 如果type是 {@link ParameterizedType} 类型的对象<br>
  * 可以使用 getGenericsTypes() 方法取得它的泛型数组
  *
  * @param type
  * @return
  */
 @SuppressWarnings({"unchecked"})
 public static <T> Mirror<T> me(Type type) {
   if (null == type) {
     return null;
   }
   Mirror<T> mir = (Mirror<T>) Mirror.me(Lang.getTypeClass(type));
   mir.type = type;
   return mir;
 }
Exemplo n.º 3
0
 /**
  * 获取一个类的某个一个泛型参数
  *
  * @param klass 类
  * @param index 参数下标 (从 0 开始)
  * @return 泛型参数类型
  */
 @SuppressWarnings("unchecked")
 public static <T> Class<T> getTypeParam(Class<?> klass, int index) {
   Type[] types = getTypeParams(klass);
   if (index >= 0 && index < types.length) {
     Type t = types[index];
     Class<T> clazz = (Class<T>) Lang.getTypeClass(t);
     if (clazz == null) throw Lang.makeThrow("Type '%s' is not a Class", t.toString());
     return clazz;
   }
   throw Lang.makeThrow("Class type param out of range %d/%d", index, types.length);
 }