错误? Groovy中的“方法引用含糊不清”

时间:2014-07-19 00:14:56

标签: groovy

package bug
import groovy.transform.CompileStatic

@CompileStatic
class BugCheck
{
    static void main(String[] args)
    {
        new BugCheck()
    }

    BugCheck()
    {
        new Child().method(1f)  // causes the problem
    }

    class Parent
    {
        void method(float f, boolean b=true)
        {
            println("Parent")
        }
    }

    class Child extends Parent
    {
        @Override
        void method(float f)
        {
            println("Child")
        }
    }
}

使用Groovy 2.3.4编译这段代码会导致以下错误:

/mirror/dev/Groovy/src/bug/BugCheck.groovy:17: [静态类型检查] - 对方法的引用不明确。无法选择[void bug.BugCheck $ Child#method(float),void bug.BugCheck $ Child#method(float)]

这是Groovy中的错误,还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

方法签名各不相同,但由于Parent方法具有默认值,因此调用它时没有boolean值会产生歧义:您是指没有参数的Child方法,或者父母有默认boolean

如果Child声明具有完全相同签名的方法,则解决歧义。

从语言设计(或用法?)的角度来看,这是一个非常不稳定的推理; IMO如果未提供Child,则应调用boolean方法。国际海事组织有理由感到困惑。