使用带有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)
这就像构造函数隐式需要作为参数传递的外部类的实例一样。我想知道为什么..
答案 0 :(得分:9)
所有(非静态)内部类需要引用其外部类的要求由Java强制实施,而不是Groovy。如果从非静态方法实例化内部类,则引用应设置为this
。但是,静态方法中没有this
引用。
要解决问题:
答案 1 :(得分:4)
当然构造函数需要外部类的实例。这就是内在阶级存在的原因:只存在于外部阶级中。你不能在其外部类之外实现内部类。
答案 2 :(得分:2)
在Java中也是如此,但是当您实例化内部实例时,您不必包含隐藏参数。
尝试以下两种方法之一:
this
ContentEntry
实例......:)