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

如果在 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))
}

这不能像接口那样完成.

你可以这样做:

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

然后

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

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...