package org.nutz.lang.util; import java.lang.reflect.Array; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.Map; /** * 通过实现ParameterizedType,达到无需通过反射得到泛型Type</p> 通过嵌套Map/List,可得出无限可能 * * @author wendal(wendal1985@gmail.com) * */ public class NutType implements ParameterizedType { /** * 生成List<AbcBean>形式的泛型信息 * * @param clazz * 泛型的具体类 * @return List<clazz>形式的泛型Type */ public static Type list(Type clazz) { return new NutType(List.class, clazz); } /** * 生成Abc[]形式的泛型信息 */ public static Type array(Class<?> clazz) { return new NutType(Array.newInstance(clazz, 0).getClass()); } /** * 生成Map<key,value>形式的泛型Type * * @param key * key的泛型 * @param value * value的泛型 * @return Map<key,value>形式的泛型Type */ public static Type map(Type key, Type value) { return new NutType(Map.class, key, value); } /** * 生成Map<String,value>形式的泛型Type * * @param value * value的泛型 * @return Map<String,value>形式的泛型Type */ public static Type mapStr(Type value) { return new NutType(Map.class, String.class, value); } public NutType() {} public NutType(Type rawType, Type... actualTypeArguments) { this.rawType = rawType; this.actualTypeArguments = actualTypeArguments; } private Type[] actualTypeArguments; private Type rawType; private Type ownerType; public Type[] getActualTypeArguments() { return actualTypeArguments; } public Type getRawType() { return rawType; } public Type getOwnerType() { return ownerType; } public void setActualTypeArguments(Type... actualTypeArguments) { this.actualTypeArguments = actualTypeArguments; } public void setOwnerType(Type ownerType) { this.ownerType = ownerType; } public void setRawType(Type rawType) { this.rawType = rawType; } }