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]);
}
}
方法xmlPathToObj,Class classType =((Class)((ParameterizedType)this.getClass()。getGenericSuperclass())。getActualTypeArguments()[0]); 给出java.lang.ClassCastException:java.lang.Class不能转换为java.lang.reflect.ParameterizedType。
答案 0 :(得分:2)
返回表示此类所代表的实体(类,接口,基本类型或void)的直接超类的Type。
如果超类是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。
您正在使用此类型获取超类类型。在您的情况下,您没有定义超类,因此它是Object
,而Object
不是通用类。
public class Test{
public static void main(String args[]) throws IOException {
System.out.println(Test.class.getGenericSuperclass().getTypeName());
}
}
java.lang.Object
如果扩展参数化的类,则可以得到正确的结果:
public class Test extends Generic<String>{
public static void main(String args[]) throws IOException {
System.out.println(Test.class.getGenericSuperclass().getTypeName());
}
}
class Generic<T> { }
main.Generic <java.lang.String>
了解您需要在非泛型类中使用它来实际获取值。在泛型类中,您将无法恢复该类型。
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> {
}
main.Generic<U>