java代码实例化另一个java文件

时间:2011-03-07 11:48:20

标签: java groovy

我想编写一个程序来动态调用另一个Java类(未编译)中的方法,该类具有location的文件名。为此,我使用了以下代码,但它没有用。

//folder location of my java file to be loaded
String url = "C:/Temp/testcases/test.java"; 
//name of the java file to be loaded
String classname = "test.java"; 
this.class.classLoader.rootLoader.addURL(new URL(url+str));
Class.forName(str).newInstance();

上面的实例无法调用我想动态加载的java文件中的方法。它有什么错误?

2 个答案:

答案 0 :(得分:3)

类加载器只能加载编译的类。它无法打开Java源文件,即时编译它们并加载它们的类。

此外,类名与文件名不同。

答案 1 :(得分:0)

我同意你的回答。上面代码中的错误是使用新URL(C:// ...)。如果我正确地提到包名称wrt路径,它应该有效。无论如何我正在处理groovy文件,所以我发现这个代码比我上面提到的普通class.forname更有效。

def sourceString = (new File(C:/xyz.groovy)).getText()
ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(sourceString);
template =  groovyClass.newInstance()