微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Groovy构造函数

使用Groovy类的构造函数时,我遇到问题.

我在DataGroovy的文件中有一个Data Data类,内部有一个ContentEntry类.我想从Data方法初始化ContentEntry实例:

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.如果从非静态方法实例化内部类,则应将引用设置为此.但是,静态方法中没有这个引用.

解决这个问题:

>从非静态方法实例化内部类>使内部类静态.然后,您可以从任何地方实例化(但是它将不再具有对外部类的实例的引用).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐