关于反射泛型的封装 博客分类: java
程序员文章站
2024-03-14 12:42:04
...
最近用到了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了。
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了。
推荐阅读
-
关于反射泛型的封装 博客分类: java
-
关于反射泛型的封装 博客分类: java
-
mybatis泛型Dao参考一 博客分类: mybatis ibatis 泛型DAO接口的设计 博客分类: 结构设计 DAOiBATISMySQLOracleSpring
-
maven编译出现source 1.3 中不支持泛型问题的解决方案 博客分类: 应用问题 mavensource 1.3泛型
-
关于多线程的一道题目 博客分类: java 试题
-
【转载】关于自定义404错误页面不生效的问题 博客分类: java web 404
-
【转载】关于自定义404错误页面不生效的问题 博客分类: java web 404
-
泛型的简单理解 博客分类: JAVA基础 JAVA基础泛型理解编译器
-
应用Java泛型和反射导出CSV文件的方法
-
应用Java泛型和反射导出CSV文件的方法