2014-07-19 20 views
2
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導致以下錯誤:錯誤? 「參考方法不明確」在Groovy

/mirror/dev/Groovy/src/bug/BugCheck.groovy: 17:[靜態類型檢查] - 對方法的引用不明確。無法在[void bug.BugCheck $ Child#method(float),void bug.BugCheck $ Child#method(float)]之間進行選擇

這是Groovy中的錯誤,還是我錯過了某些東西?

回答

2

的方法簽名有所不同,但由於Parent方法有一個默認值,沒有boolean值調用它產生歧義:你的意思是Child方法不帶參數,或者用默認boolean父?

如果Child聲明具有完全相同簽名的方法,則解決了歧義。

從語言設計(或使用?)的角度來看,這是非常不穩固的推理,但;如果沒有提供boolean,應調用IMO的Child方法。海事組織的困惑是必要的。

+0

Snell對我來說就像一個bug。默認參數將解析爲兩個方法,其中一個在子類中被覆蓋。可能值得投入常規吉拉 –