本文以“通用Excel处理器”为例,说明如何在抽象泛型类中的方法中,获取运行时的实际泛型类型Class,继而使用反射机制完成业务需求
import java.lang.reflect.ParameterizedType;
/**
* 通用Excel导入导出处理器
*
* @param <I> 导入类型
* @param <E> 导出类型
*/
public abstract class AbstractExcelHandler<I, E> {
/**
* 获取导入对象的Class类型
* 1. getClass().getGenericSuperclass()获取当前对象的直接超类Type,并将其向下强转为ParameterizedType(“参数化类型”)
* 2. 由ParameterizedType获取泛型类的实际参数数组。我们可以访问其中期望位置的类型,例如I,索引值是0,再强转为Class<I>即可获取到I的类型
* @return
*/
@SuppressWarnings("unchecked")
private Class<I> getImportClass() {
return (Class<I>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
}