我有一个类名和类源代码列表。我需要在内存中编译这些类,以便在程序中使用它们。编译一个类很好,除非该类需要另一个必须编译的类。例如,如果我有 A 类
package example;
public class A {
public A() {
doSomething();
}
}
该类工作正常,但是如果我必须在它之后编译这个类:
package example;
public class B {
private A holderForA;
public B() {
this.holderForA = new A();
}
}
B 不会成功编译。
这是我的两个类的编译代码(代码是前面提到的代码列表)。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
for(String key : code.keySet()) {
CODE = code.get(key);
NAME = key;
JavaFileObject file = new JavaSourceFromString(NAME, CODE);
Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(file);
CompilationTask task = compiler.getTask(null, null, diagnostics, null, null, compilationUnits);
System.out.println("The task completed: " + task.call() + " for " + NAME);
}
第一个类返回真,第二个返回假。如果我设置了多个类,如 A 和 B,A 类工作,B 类失败。我该怎么办?