最近遇到过这个问题 - 当我在一个groovy类中有两个类时,如果main方法类不在顶部我遇到了这个问题。
class Book {
private String name
void setName(String bookName) {
name=bookName
print "Book Name => "+bookName+"\n";
}
String getName(){
return name;
}
}
class TestClass {
static main(args) {
Book t = new Book();
t.setName("First Book");
print "book title=>"+t.getName()+"\n"
}
}
但是如果改变这两个类的顺序而不是没有错误,那么它是否意味着主要方法类应该在Groovy中处于最顶层?
答案 0 :(得分:1)
是的,类的顺序在一个groovy脚本中很重要。如果你解析一个groovy脚本并检查它的类名,它将是顶级类,而不是具有main方法的类或与文件名相同的名称。它可以是具体类,抽象类,枚举,接口或特征。
让我们看看你的情况。我们将把您的代码放在GString
中,然后尝试使用我们自己的GroovyClassLoader
解析它。
String script = """
class Book {
private String name
void setName(String bookName) {
name=bookName
print "Book Name => "+bookName+"\\n";
}
String getName(){
return name;
}
}
class TestClass {
static main(args) {
Book t = new Book();
t.setName("First Book");
print "book title=>"+t.getName()+"\\n"
}
}
"""
GroovyClassLoader loader = new GroovyClassLoader()
GroovyCodeSource codeSource = new GroovyCodeSource(script, "MyClass", GroovyShell.DEFAULT_CODE_BASE)
println loader.parseClass(codeSource)
当您执行此代码时,它将打印class Book
。因为这是脚本中第一个可用的类。
您获得的异常是因为您的顶级类没有主方法,并且您的脚本在加载类后都没有执行的操作。一种解决方案是将TestClass
移到顶部,或者只是在文件TestClass.main()
的末尾添加另一行,它将毫无问题地执行。