错误? "Reference to method is ambiguous"在格鲁维


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编译这段代码会导致以下错误:

/镜子/dev/Groovy/src/错误/BugCheck。groovy: 17:[静态类型检查]-方法的引用是不明确的。[void bug.BugCheck$Child#method(float), void bug.BugCheck$Child#method(float)]

这是Groovy中的一个bug,还是我在这里错过了什么?

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

如果Child用完全相同的签名声明了一个方法,那么歧义性就被解决了。

从语言设计(或用法?)的角度来看,这是一个相当不可靠的推理;在IMO中,如果没有提供boolean,应该调用Child方法。

相关内容

  • 没有找到相关文章

最新更新