java - 如何在 Java 中从另一个类创建和构造一个类
问题描述
是否可以创建一个类(从无到有)并从另一个类构造/编写他的内容?
例如,我有一堂课StartingClass
。并使用我想创建的此类的方法ConstructClass
(尚不存在)。在StartingClass
方法内部,我想指定它的内容ConstructClass
,比如它扩展的类、它的属性、它的方法。
我需要这样做,因为我需要从生成的类和未编组的 xml 数据中创建新类。
我想过编辑一个带有.java
扩展名的文件,但它不是很干净。
解决方案
使用 JavaCompiler,您可以在运行时创建和编译。下面的这个例子展示了如何做到这一点,您可以参数化文件和文件夹的生成,还可以读取一个现有 Java 文件的内容作为您生成的模板。
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class StackOverFlowClassFileGenerationTest {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("ClassGenerationTest.java");
PrintStream ps = new PrintStream(fos);
ps.println("public class ClassGenerationTest {\n");
ps.println("\t\tpublic static void main(String[] args) {\n");
ps.println("\t\t\t\tSystem.out.println(\"Testing the class generation at runtime\");\n");
ps.println("\t\t}\n}\n");
ps.close();
fos.close();
JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
String javacOpts[] = {"ClassGenerationTest.java"};
if (javac.run(null, null, null, javacOpts) != 0) {
System.out.println("Error");
} else {
System.out.println("Success");
}
}
}