如何获取泛型的Class对象
/ / 点击 / 阅读耗时 3 分钟1. 需求背景
我所做的项目中,使用了阿里云ONS作为消息中间件。在写Topic消费时,需要实现MessageListener的consume()方法,此方法中message参数的body成员变量是byte[]类型,因为项目约定使用json作为消息传递的序列化方式,故有想法通过模板方法,进行统一的byte[]到类对象的转换。在转换时遇到了问题,怎样获取到方法所在类上,泛型的实际类型。
2. 实现
1 | /** |
3. 相关方法
java.lang.Class#getGenericSuperclass()
返回
Type表示此所表示的实体(类,接口,基本类型或void)的直接超类类。如果超类是参数化类型,返回的
Type对象必须准确反映源代码中使用的实际类型参数。 如果以前没有创建表示超类的参数化类型。 有关参数化类型创建过程的语义,请参见ParameterizedType的声明 。 如果这个类表示Object类,接口,原始类型或void,则返回null。 如果此对象表示数组类,则返回表示Object类的类对象。java.lang.reflect.ParameterizedType#getActualTypeArguments()
返回一个表示此类型的实际类型参数的数组
Type对象。请注意,在某些情况下,返回的数组为空。 如果此类型表示嵌套在参数化类型中的非参数化类型,则可能会发生这种情况。