在将Groovy类与构造函数一起使用时遇到问题。
我在一个名为Data
的文件中有一个Data.groovy
类,带有一个内部类ContentEntry
。我想从ContentEntry
方法初始化Data
实例:
static void initContent(nid, uid)
{
curContent = new ContentEntry()
curContent.nid = nid;
curContent.uid = uid;
}
ContentEntry
定义为:class ContentEntry
{
public int nid, uid
private tags = [:]
public ContentEntry()
{
}
ContentEntry(int nid, int uid)
{
this.nid = nid
this.uid = uid
}
//omitted rest of the class
但是,在运行项目时,它会给我以下错误:
Exception in thread "main" org.codehaus.groovy.runtime.metaclass.MethodSelectionException:
Could not find which method <init>() to invoke from this list:
public it.softit.Data$ContentEntry#<init>(it.softit.Data, int, int)
public it.softit.Data$ContentEntry#<init>(it.softit.Data)
就像构造函数隐式需要一个作为参数传递的外部类的实例一样。我想知道为什么。
最佳答案
Java(而不是Groovy)提出了所有(非静态)内部类都需要对其外部类的引用的要求。如果从非静态方法实例化内部类,则应将引用设置为this
。但是,静态方法中没有this
引用。
要解决此问题,请执行以下操作:
关于Groovy构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2043218/