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

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


抱怨的唯一一行是尝试使用默认值的那一行。我不能从codehaus网站得知是否支持此功能。

IDE错误是:

Groovy:Cannot specify default value for method parameter


因此,这使我认为它不受支持。由于将有多种实现,因此我想在这里使用一个接口。我实际上并不需要接口中的默认值,但是如果实现类随后尝试默认此参数,则尝试履行接口协定时会出错。有什么办法吗?

最佳答案

你不能。

当您定义默认值时,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))
}


无法做到这一点,因为它位于Interfaces中。

您可以这样做:

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


然后

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

07-24 09:18
查看更多