2017-02-14 7 views
1

У меня есть следующий код в заводной:Groovy CompileStatic с родовыми списками

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

Он компилирует хорошо, пока я не добавить @CompileStatic аннотацию к классу. Затем компиляция завершается с

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] 

ли это на самом деле ожидать, что Groovy не может вывести общий тип этого пустого списка []?

+0

'[]' имеет iferred тип 'List ', который отлично от моего По. То же самое с 'null' – injecteer

+0

В этом конкретном случае, имея LHS типа' List 'Я как-то ожидал' [] 'одного типа ... Потому что' List l = [] 'работает ... – Nikem

+0

Это похоже на ошибку Groovy. – Dany

ответ

0

Я предлагаю вам не использовать дженерики вообще. Для меня он компилируется и работает хорошо, как и что:

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

Но если вы все еще сильно нужны дженерики, попробуйте следующее:

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