我在一个类中有此方法,我想获取T-类的类型并将其放在它的位置(我用粗体字写出,但是我得到的只是错误]
@Override
public <T>Optional<T> parse(String fileString, Class<T> someClass) {
File file = new File(fileString);
T newClass = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance( ???? How do I get class T here ??? );
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
newClass = (T) jaxbUnmarshaller.unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
return (Optional<T>) Optional.ofNullable(newClass);
}
这是我的主要方法,不是那么重要:
XmlService xmlParser = XmlServiceImpl.getInstance();
Optional<Company> customer = xmlParser.parse("xmlFile.xml", Company.class);
System.out.println(Company.class);
您可以将您的课程令牌直接传递到JAXBContext.newInstance
。
JAXBContext jaxbContext = JAXBContext.newInstance(someClass);
顺便说一下,只要您在class<T>
中的类型参数是可更改的类型,以下未经检查的强制转换是安全的。此外,由于newClass
的类型为T,因此您不需要在最后一个return语句中进行强制转换。
这里是文档摘录:
classesToBeBound新要识别的Java类的列表JAXBContext。可以为空,在这种情况下,JAXBContext仅知道有关规范定义的类的信息将返回。