最近用到了jackson转json。看了下TypeReference的源码,记录下。便于以后自己可以用来做一些针对泛型反射简单的封装。
public abstract class TypeReference<T> implements Comparable<TypeReference<T>>
{
protected final Type _type;
protected TypeReference()
{
Type superClass = getClass().getGenericSuperclass();//获取该类的直接超类
if (superClass instanceof Class<?>) { //如何是class类型,即没有传入泛型
throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information");
}
_type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public Type getType() { return _type; }
@Override
public int compareTo(TypeReference<T> o) { return 0;
//仅仅是为了避免不传入泛型}
}
}
这段代码可以用来构建复杂的数据类型。然后可以用:
((ParameterizedType)type).getRawType() //获取根类型。
((ParameterizedType)type).getActualTypeArguments()[0] //获取根类型中的类型。
得到复杂类型后就可以利用反射将json反序列化为javabean了。
关于反射泛型的封装
猜你喜欢
转载自chen-sai-201607223902.iteye.com/blog/2323808
今日推荐
周排行