java获取异常参数_TypeVariableImpl cannot be cast to java.lang.Class 问题解决-泛型参数获取异常...
今天遇到一个奇怪问题,一个工具类报错,工具类的作用是根据泛型参数解析Request中的参数,封装实体类,实现属性注入功能,用在SpringMVC上,报错如下:
processing failed; nested exception is java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class] with root cause
java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
以下为类定义
public class EntityWrapper<T> extends Wrapper<T> {
public Class<T> getTClass(){
public Class<T> getTClass() {
Object tbb = getClass().getGenericSuperclass();
Object[] pnk =
((ParameterizedType)tbb).getActualTypeArguments();
@SuppressWarnings("unchecked")
Class<T> tClass = (Class<T>) ((ParameterizedType)
getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
return tClass;
}
}
}
调用处的代码
EntityWrapper<Product> entityWrapper = new EntityWrapper<Product>(entityClass);
我们简化一下这个问题,编写以下代码:我们的目的是在构造方法中获取到User类,从而对User类的结构进行分析。
public class TestG {
public static void main(String[] args) {
MM<User> mm = new MM<User>();
}
}
class User{
}
class MM<T> extends M<T>{
public MM() {
//返回直接继承的父类类型
Object tbb = getClass().getGenericSuperclass();
System.out.println(tbb.getClass().getSimpleName());
Object[] pnk = ((ParameterizedType)tbb).getActualTypeArguments();
System.out.println((Class)pnk[0]);
}
}
class M<T>{
}
报错是一摸一样的,测试发现,如果父类的泛型跟子类一样,都是T,则是无法获取到父类的泛型的。
如果父类的泛型是固定的,则可获取到,很奇怪。
此问题未解决。
临时的解决方案:
EntityWrapper<Product> entityWrapper = new EntityWrapper<>(Product.class);
更多推荐
所有评论(0)