Java:GroovyClass加载程序:无法在 Groovy Class 中找到方法的符号
Java : GroovyClassLoader : cannot find symbol for method in Groovy Class
我正在尝试使用 GroovyClassLoader in java 来执行 Groovy Class 中的方法。
我创建了一个 Java Class, pubic 方法,它创建了一个 GroovyClassLoader 的实例,parseClass 然后创建一个新的class的实例,调用class中的一个方法。
public class Gtest{
public static void main(String args[])throws IOException , InstantiationException ,IllegalAccessException {
GroovyClassLoader gcl = new GroovyClassLoader();
Class cls = gcl.parseClass("class Foo { void doIt() { println \"ok\" } }");
Object obj = cls.newInstance();
if(obj == null){
System.out.println("null");
}
obj.doIt();
}
}
错误:Gtest.java:22:错误:找不到符号
obj.doIt();
^
符号:方法 doIt()
location:Object类型的变量obj
1 个错误
这是因为对象 class 没有 doIt() 方法。
您必须使用以下语法来调用您的方法。
Method sumInstanceMethod
= Operations.class.getMethod("doIt");
Object result
= sumInstanceMethod.invoke(obj, null);
System.out.println(cls.getDeclaredMethod( "doIt", new Class[] {}).invoke( obj, new Object[] {} ));
我正在尝试使用 GroovyClassLoader in java 来执行 Groovy Class 中的方法。
我创建了一个 Java Class, pubic 方法,它创建了一个 GroovyClassLoader 的实例,parseClass 然后创建一个新的class的实例,调用class中的一个方法。
public class Gtest{
public static void main(String args[])throws IOException , InstantiationException ,IllegalAccessException {
GroovyClassLoader gcl = new GroovyClassLoader();
Class cls = gcl.parseClass("class Foo { void doIt() { println \"ok\" } }");
Object obj = cls.newInstance();
if(obj == null){
System.out.println("null");
}
obj.doIt();
}
}
错误:Gtest.java:22:错误:找不到符号 obj.doIt(); ^ 符号:方法 doIt() location:Object类型的变量obj 1 个错误
这是因为对象 class 没有 doIt() 方法。 您必须使用以下语法来调用您的方法。
Method sumInstanceMethod
= Operations.class.getMethod("doIt");
Object result
= sumInstanceMethod.invoke(obj, null);
System.out.println(cls.getDeclaredMethod( "doIt", new Class[] {}).invoke( obj, new Object[] {} ));