Groovy - 接口中定义的方法可以有默认值吗?

时间:2014-01-20 16:19:14

标签: groovy interface

如果在Eclipse / STS中输入以下内容(使用groovy):

interface iFaceWithAnIssue {
    def thisIsFine(a,b,c)
    def thisHasProblems(alpha='va')
}

唯一抱怨的是试图使用默认值的那一行。如果支持与否,我无法从codehaus网站上看出来。

IDE错误是:

Groovy:Cannot specify default value for method parameter 

所以这让我觉得它不受支持。由于会有多个实现,我想在这里使用一个接口。我真的不需要接口中的默认值,但是如果实现类然后尝试默认此参数,则尝试完成接口契约时会出错。有什么办法吗?

1 个答案:

答案 0 :(得分:10)

不,你不能。

当您定义默认值时,Groovy实际上会在您的类中创建多个方法,例如:

class Test {
    void something( a=false ) {
        println a
    }
}

实际创建

public void something(java.lang.Object a) {
    this.println(a)
}

public void something() {
    this.something(((false) as java.lang.Object))
}

这不能像接口那样完成。

你可以这样做:

interface iFaceWithAnIssue {
    def thisHasProblems()
    def thisHasProblems(alpha)
}

然后

class Test implements iFaceWithAnIssue {
    // This covers both Inteface methods
    def thisHasProblems(alpha='va') {
        // do something
    }
}
相关问题