我想编写一个程序来动态调用另一个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文件中的方法。它有什么错误?
答案 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()