如何从java中的.java文件创建“java.lang.Class”对象

时间:2012-07-23 00:19:52

标签: java reflection junit compilation

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

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

2 个答案:

答案 0 :(得分:6)

java 6 onwards为编译器提供了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-indepth.html

有另一个例子

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

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

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

对不起之前的谷歌嗤之以鼻。


它让我印象深刻,也许你只想要一个类对象。

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

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

答案 1 :(得分:1)

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

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

然后玩游戏!