从泛型类型T获取"类"对象

MyT*_*tle 12 java generics

我想创建返回XML文档的Object表示的泛型函数(使用JAXB).我需要将"class"对象传递给JAXBContext构造函数,但是如何从T中获取它?

public <T> readXmlToObject(String xmlFileName, T  jaxbClass) {
   JAXBContext context = JAXBContext.newInstance(T.class); // T.class - here error, how to get it?
   .......
}
Run Code Online (Sandbox Code Playgroud)

biz*_*lop 14

相反,传递类对象,这很容易.

public <T> T readXmlToObject(String xmlFileName, Class<T>  jaxbClass) {
       JAXBContext context = JAXBContext.newInstance( jaxbClass ); // T.class - here error, how to get it?
       Object o = context.createUnmarshaller().unmarshal( new File( xmlFileName ) );
       return jaxbClass.cast( o );
}
Run Code Online (Sandbox Code Playgroud)

这里的想法是,由于您无法从对象中提取类型参数,因此必须以相反的方式执行:从类开始,然后操作对象以匹配类型参数.


Boh*_*ian 7

不要听别人的声音......你可以得到它.

只需将jaxbClass参数类型更改为Class<T>:

public <T> T readXmlToObject(String xmlFileName, Class<T> jaxbClass) {
   JAXBContext context = JAXBContext.newInstance(jaxbClass);
   .......
}
Run Code Online (Sandbox Code Playgroud)