我如何更改这个泛型 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 中的某些方法,您可能只需要尝试上面的方法。