动态创建和读取java类

时间:2016-03-22 15:02:05

标签: java class xsd runtime xjc

我正在开发一个从xsd创建Java类的项目。在运行时,我想创建类并读取这些类的名称。但是,当我第一次运行项目时(在创建类之前),它给出了一个错误,上面写着“java.lang.ClassNotFoundException:generated.classes.AddressType”。如果我再次运行,没有更改任何东西(此时创建类),它不会给我一个错误。我使用“com.sun.tools.xjc.api”来创建类。当我想读类名时,我只是这样做

File folder = new File(System.getProperty("user.dir")+"\\src\\generated\\classes");
    File[] listOfFiles = null;
    List<String> namesOfClasses = new ArrayList<>();
    listOfFiles=folder.listFiles();
    for(File file: listOfFiles){
            try {
                    if(!file.getName().equals("ObjectFactory.java")){
                        String classname="generated.classes."+file.getName().substring(0, file.getName().length() - 5);
                        namesOfClasses.add(classname);
                    }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    return namesOfClasses;

看起来,在运行时无法看到新创建的类。如何在运行时读取此类?

1 个答案:

答案 0 :(得分:0)

您可以像(by answer)一样动态编译类:

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, files);

请查看类似的问题以寻求其他选择:

为了测试我的xjc-documentation-annotation-plugin,我正是这么做的 :XJCPluginDescriptionAnnotationTest可以用作分步教程。