Java 为什么是泛型类<;t>;类型参数未转换为ParameteredType 公共类JAXBUtil{ @抑制警告(“未选中”) 公共T xmlPathToObj(最终字符串文件路径)抛出JAXBEException{ 类classType=((类)((参数化类型)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); } }
方法xmlPathToObj,类classType=((类)((参数化类型)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); 正在给java.lang.ClassCastException:java.lang.Class不能转换为java.lang.reflect.ParameterizedType。 返回表示该类表示的实体(类、接口、基元类型或void)的直接超类的类型 如果超类是参数化类型,则返回的类型对象必须准确反映源代码中使用的实际类型参数 您将使用此命令获得超类类型。在您的例子中,您没有定义超类,因此它是Java 为什么是泛型类<;t>;类型参数未转换为ParameteredType 公共类JAXBUtil{ @抑制警告(“未选中”) 公共T xmlPathToObj(最终字符串文件路径)抛出JAXBEException{ 类classType=((类)((参数化类型)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); } },java,generics,classcastexception,Java,Generics,Classcastexception,方法xmlPathToObj,类classType=((类)((参数化类型)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); 正在给java.lang.ClassCastException:java.lang.Class不能转换为java.lang.reflect.ParameterizedType。 返回表示该类表示的实体(类、接口、基元类型或void)的直接超类的类型 如果超类是参数化类型,则返回的类型
Object
,而Object
不是泛型类
public class JAXBUtil<T> {
@SuppressWarnings("unchecked")
public T xmlPathToObj(final String FilePath) throws JAXBException {
Class<T> classType = ((Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
java.lang.Object
如果扩展参数化的类,则可以得到正确的结果:
public class Test{
public static void main(String args[]) throws IOException {
System.out.println(Test.class.getGenericSuperclass().getTypeName());
}
}
公共类测试扩展了泛型{
公共静态void main(字符串args[])引发IOException{
System.out.println(Test.class.getGenericSuperclass().getTypeName());
}
}
类泛型{}
main.Generic
请理解,您需要在非泛型类中使用它来实际获取值。在泛型类中,您将无法恢复该类型
public class Test extends Generic<String>{
public static void main(String args[]) throws IOException {
System.out.println(Test.class.getGenericSuperclass().getTypeName());
}
}
class Generic<T> { }
公共类测试扩展了泛型{
公共静态void main(字符串args[])引发IOException{
System.out.println(新测试().getClass().getGenericSuperclass().getTypeName());
}
}
类泛型{
}
main.Generic
你想干什么?
public class Test<U> extends Generic<U>{
public static void main(String args[]) throws IOException {
System.out.println(new Test<Integer>().getClass().getGenericSuperclass().getTypeName());
}
}
class Generic<T> {
}