最近用到了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了。
分享到:
相关推荐
本文将深入探讨如何利用泛型来实现灵活的SQL语句拼装,以实现“泛型封装的SQL语句”。 首先,我们要理解泛型的概念。泛型是.NET框架中的一项重要特性,它允许在定义类、接口和方法时使用类型参数,从而创建可以应用...
在Java编程中,JDBC(Java...总的来说,泛型封装JDBC是一种高效、灵活的编程实践,它提高了代码的可重用性和安全性,简化了数据库操作。通过适当的设计,我们可以创建一个强大的工具集,以适应不同的数据库和业务需求。
在这个特定的案例中,"基于泛型反射的数据层封装"是利用了Java的泛型和反射特性来实现这一目标。泛型提供了一种在编译时类型安全的方式,允许我们创建可以处理多种类型的类、接口和方法。而反射则是Java提供的一种...
然而,反射的使用也会带来性能开销,并且可能会破坏封装性。 注解是Java SE 5中的另一个新特性,它提供了一种机制,用于将任何信息或元数据与程序中的元素(如类、方法、变量等)关联起来。注解不会直接影响代码的...
反射操作需要谨慎,因为它打破了封装性,可能引发安全问题,且性能相对较低。 总的来说,Java 5 中的泛型和反射这两个特性显著提升了代码的类型安全性和灵活性,同时,反射为解决复杂编程问题提供了新的途径。学习...
这个压缩包包含的“java多线程反射泛型及正则表达式学习笔记和源码”正是针对这些关键知识点的学习资料。 首先,我们来详细探讨多线程。在Java中,多线程允许程序同时执行多个不同的任务,提高了程序的并发性和效率...
先说一下遇到的问题:通过使用GSON泛型进行报文转换的时候想要对部分关键字段加密,发现在封装好的方法中,对个别字段的加密满足不了。 解决过程:首先通过反射获取到bean下的对象名称。 对象名称获取到了之后需要...
在使用时应谨慎,避免过度依赖反射,因为它可能导致性能下降,并可能破坏代码的封装性。同时,泛型和反射的结合可能会弱化编译时的类型检查,导致潜在的运行时错误。 总的来说,J2EE环境中的泛型和反射结合使用,...
4 封装一个方法,能控制台输出任意实体的全部属性和属性值; 5 进阶需求:提供泛型的数据库实体插入、实体更新、ID删除数据的数据库访问方法; 6 进阶需求(可选):欢迎小伙伴儿写个实体自动生成器; 7 进阶需求...
具体到给定的`GenericUtil`类,其核心功能在于提取出泛型参数的具体类型,这对于动态类型处理、反射操作以及类型检查等场景非常有用。 #### 描述详解:“泛型工具类,用于dao的超类,获取实体类的类型。” 在描述...
Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...
在研究泛型DAO的源码时,我们可以学习到如何实现泛型类,以及如何在具体操作中使用反射或类型信息来处理泛型类型。例如,Hibernate的`Session`接口和`SessionFactory`类就提供了泛型版本的`get()`和`load()`方法,...
6. **泛型处理**:虽然反射不能直接处理泛型类型信息,但可以通过获取类的实际类型参数来间接实现,例如`TypeVariable`和`ParameterizedType`接口。 7. **注解处理**:反射也支持检查类、方法、字段上的注解,通过`...
在这个“21-04-03_FactoryPattern(001_在工厂模式下以通过接口结合列表、泛型和反射等方式实现指定类型的实例化操作_控制台)”案例中,我们将探讨如何利用接口、泛型和反射等技术来进一步增强工厂模式的功能。...
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
本篇文章将深入探讨如何使用Core Java JDK 1.8中的技术来实现这一转换,特别是通过泛型和反射机制。 首先,让我们了解什么是泛型。泛型是Java 5引入的一项功能,它允许我们在类、接口和方法中使用类型参数,以提高...
【泛型DAO模型设计】是Java开发中一种高效且可复用的数据访问对象(DAO)设计方式,结合了泛型和反射技术。泛型在Java中引入,旨在提高代码的安全性和可读性,减少类型转换的繁琐过程。DAO设计模式主要用于数据库...
此外,可以使用枚举类型(enum)来表示各种状态,将返回值封装在一个对象中,包含成功/失败状态以及额外的错误信息。 在实际应用中,这些概念常常结合使用。例如,我们可以创建一个泛型工厂类,该类接受一个类的...
通过反射,我们可以获取关于类、接口、方法、属性等的信息,包括它们的自定义属性。在上面的例子中,我们可以通过反射来获取枚举值的`DescriptionAttribute`: ```csharp FieldInfo field = typeof(Color).GetField...
5. 接口和泛型:反射同样支持接口和泛型,可以获取接口的方法和实现,以及泛型的实际类型。 JDBC(Java Database Connectivity)是Java访问数据库的标准接口,它提供了一套规范,使得Java程序员可以与各种类型的...