2016-02-02 15 views
7

, neden Groovy yönteminde barMany içinde kapatma parametresinin verilen genel tür deklarasyon görmezden gibi görünüyor: 2.4.5 JVM: 1.7.0_80 Satıcı: Oracle Corporation OS: LinuxKapatma parametre anomali Aşağıdaki kodda

Yani önce farkında değil bu garip hata vardı Güncelleme - org .codehaus.groovy.control.MultipleCompilationErrorsException: Başlangıç ​​ başarısız oldu - Tam çıkış göndeririz:

~/grov/tests$ groovyc generics.groovy 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
generics.groovy: 27: Expected parameter of type java.lang.Object but got T 
@ line 27, column 19. 
     items.each { T item -> barOne(item) } // Error: 
        ^

generics.groovy: 27: [Static type checking] - Cannot find matching method Bar#barOne(java.lang.Object). Please check if the declared type is right and if the method exists. 
@ line 27, column 29. 
     items.each { T item -> barOne(item) } // Error: 
          ^

generics.groovy: 30: Expected parameter of type java.lang.Object but got T 
@ line 30, column 22. 
      items.each { T item -> barOne(item as T) } // Error: 
         ^

3 errors 

~/grov/tests$ groovyc -v 
Groovy compiler version 2.4.5 
Copyright 2003-2015 The Apache Software Foundation. http://groovy-lang.org/ 

Güncelleme şeyiyle

Biraz daha geçici çözümler: Bu çözümler çalışmıyor gibi görünüyor:

Closure c = { T item -> barOne(item) }; items.each c // See comments by @tim_yates 
    items.each ({ T item -> barOne(item) } as Closure) // Casting to closure works too! 

Aynı sorun, bir tür genel T:

tabanlı bir sınıf olduğunda da geçerlidir.
@CompileStatic 
class Baz<T extends Baz<T>> { 
    List<T> getList() { 
     return [new T(), new T()] 
    } 
} 

@CompileStatic 
class BazClient { 
    void useBaz(Baz baz) { 
     // baz.getList().each {Baz it -> println it} // Error 
     Closure c = {Baz it -> println it}; baz.getList().each c // works 
     baz.getList().each ({Baz it -> println it} as Closure) // works 
    } 
} 
+1

Hangi sürümü groovy? –

+0

Güncelleme - özür dilerim. –

+0

Bu kodla ilgili bir sorunum yok, IDE'yi yeniden başlatmayı deneyin. Neden hata dediği hakkında bir fikrim yok. – Fincio

cevap

0

Bu, Groovy 2.4.6'da giderilen jenerikle ilgili bugs'lardan biriydi.