4

如何java.lang.Class从给定的 .java 文件中实例化类的对象?

我想创建一个应用程序来自动生成 JUnit 测试。为此,我需要“方法”对象,而对于“方法”对象,我需要有一个“类”对象。

4

2 回答 2

6

java 6 以后有一个用于编译器的 api:http ://www.javabeat.net/2007/04/the-java-6-0-compiler-api/

上面的链接包含一个示例。

这是另一个例子 - http://www.java2s.com/Code/Java/JDK-6/JavaCompilertoolshowyoucancompileaJavasourcefrominsideaJavaprogram.htm

要在编译后加载文件,请使用类加载器。在http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html有一个例子,在http://www.javaworld.com/jw-10-1996/jw-10-有另一个例子深度.html

你会认为会有一个图书馆来简化这一切。我找不到,但我还在找。

同时,这是来自 ibm 的一篇非常好的文章,它编译了一个函数并绘制了它 - http://www.ibm.com/developerworks/java/library/j-jcomp/index.html

找到了一个 http://docs.codehaus.org/display/JANINO/Home - 这是一个简化流程的库。我建议将其配置为使用 javax.tools API(请参阅“什么是 Janino”段落中的最后一句)。

很抱歉之前的 google snark。


它让我感到震惊,也许你只想要一个类对象。

如果您有一个名为 MyClass 的类,则关联的类是Myclass.class. 这可能很明显,但也许这就是你所需要的。

如果您在字符串中有类名,则可以使用此方法 - http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#forName(java.lang.字符串

于 2012-07-23T00:22:55.693 回答
1

如果您知道完整的类 String 名称,为什么不使用 Class.forName(className) 方法来获取类 Object?
例如,如果类名是yakam.yale.MyClass,只需调用

Class.forName("yakam.yale.MyClass");

游戏开始了!

于 2013-06-03T14:28:10.673 回答