我如何更改这个泛型 class,以便 main 方法可以工作?
How do I change this generic class, so the main method can work?
我在 class
中有这个方法
@Override
public Optional<T> parse (String fileString, Class someClass) {
File file = new File(fileString);
Class smclass= new Class();
try {
smclass= (Class) getUnmarshaller().unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
return (Optional<T>) Optional.ofNullable(smclass);
}
和主要方法:
XmlService xmlParser = XmlServiceImpl.getInstance();
Optional<class> smclass= xmlParser.parse("File.xml", smclass.class);
System.out.println(smclass);
我想更改 class 方法,以便我可以在 main 方法中调用不同的 classes,不只是一个,但我不知道如何调用。例如:
XmlService xmlParser = XmlServiceImpl.getInstance();
Optional<**class**> **class**= xmlParser.parse("xmlFile.xml", **class**.class);
System.out.println(**class**);
另一个编辑:从方法中删除了类型参数
编辑(再次):如果您不需要实例化 T
(我相信您不需要),您可以执行以下操作。如果 API 不在你的控制之下,那么你必须写 Class
而不是 Class<T>
并强制转换。
@Override
public Optional<T> parse (String fileString, Class<T> someClass) {
File file = new File(fileString);
T t = null;
try {
t = (T) getUnmarshaller().unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
return (Optional<T>) Optional.ofNullable(t);
}
如果你确实需要一个 Class
对象让解组器知道要制作什么样的对象,那么你唯一能做到的方法就是反射(这就是 Class
class。此外,我很确定 JAXB 无论如何都会在内部使用反射,这都是不安全的。
此外,您似乎没有使用 someClass
,因此您可能有一个仅包含第一个参数的方法。但是由于您正在覆盖 superclass 中的某些方法,您可能只需要尝试上面的方法。
我在 class
中有这个方法 @Override
public Optional<T> parse (String fileString, Class someClass) {
File file = new File(fileString);
Class smclass= new Class();
try {
smclass= (Class) getUnmarshaller().unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
return (Optional<T>) Optional.ofNullable(smclass);
}
和主要方法:
XmlService xmlParser = XmlServiceImpl.getInstance();
Optional<class> smclass= xmlParser.parse("File.xml", smclass.class);
System.out.println(smclass);
我想更改 class 方法,以便我可以在 main 方法中调用不同的 classes,不只是一个,但我不知道如何调用。例如:
XmlService xmlParser = XmlServiceImpl.getInstance();
Optional<**class**> **class**= xmlParser.parse("xmlFile.xml", **class**.class);
System.out.println(**class**);
另一个编辑:从方法中删除了类型参数
编辑(再次):如果您不需要实例化 T
(我相信您不需要),您可以执行以下操作。如果 API 不在你的控制之下,那么你必须写 Class
而不是 Class<T>
并强制转换。
@Override
public Optional<T> parse (String fileString, Class<T> someClass) {
File file = new File(fileString);
T t = null;
try {
t = (T) getUnmarshaller().unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
return (Optional<T>) Optional.ofNullable(t);
}
如果你确实需要一个 Class
对象让解组器知道要制作什么样的对象,那么你唯一能做到的方法就是反射(这就是 Class
class。此外,我很确定 JAXB 无论如何都会在内部使用反射,这都是不安全的。
此外,您似乎没有使用 someClass
,因此您可能有一个仅包含第一个参数的方法。但是由于您正在覆盖 superclass 中的某些方法,您可能只需要尝试上面的方法。