2017-02-14 3 views
1

Ich habe den folgenden Code in groovy:Groovy CompileStatic mit generischen Listen

class Test { 
    List<Integer> yo(boolean x) { 
    List<Integer> res = x ? [] : [1, 2, 3] 
    } 
} 

Es kompiliert gut, bis ich @CompileStatic Anmerkung zur Klasse hinzuzufügen. Dann Kompilierung schlägt mit

Test.groovy: 5: [Static type checking] - Incompatible generic argument types. Cannot assign java.util.List <? extends java.lang.Object> to: java.util.List <Integer> 
@ line 5, column 27. 
     List<Integer> res = x ? [] : [1, 2, 3] 

Ist es wirklich erwartet, dass Groovy nicht den generischen Typen dieser leeren Liste [] ableiten?

+0

'[]' hat eine iferred Typ 'Liste ' was in Ordnung ist von meinem PoV. Das Gleiche gilt für 'null' – injecteer

+0

In diesem speziellen Fall LHS vom Typ' Liste 'ich irgendwie erwartet' [] 'sein von der gleichen Art mit ... Weil' Liste l = [] 'funktioniert ... – Nikem

+0

Das sieht aus wie Groovy Bug. – Dany

Antwort

0

Ich würde vorschlagen, Sie Generika überhaupt nicht zu verwenden. Für mich stellt es und gut läuft einfach so:

List res = x ? [] : [1, 2, 3] 

Aber wenn Sie noch brauchen dringend die Generika versuchen Sie dies:

List<Integer> res = x ? [] as List<Integer> : [1, 2, 3] 
Verwandte Themen