欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于反射泛型的封装 博客分类: java  

程序员文章站 2024-03-14 11:58:40
...
最近用到了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了。