Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么是泛型类<;t>;类型参数未转换为ParameteredType 公共类JAXBUtil{ @抑制警告(“未选中”) 公共T xmlPathToObj(最终字符串文件路径)抛出JAXBEException{ 类classType=((类)((参数化类型)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); } }_Java_Generics_Classcastexception - Fatal编程技术网

Java 为什么是泛型类<;t>;类型参数未转换为ParameteredType 公共类JAXBUtil{ @抑制警告(“未选中”) 公共T xmlPathToObj(最终字符串文件路径)抛出JAXBEException{ 类classType=((类)((参数化类型)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); } }

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)的直接超类的类型 如果超类是参数化类型,则返回的类型

方法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> {
    
}