2017-02-14 5 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タイプがあり、 '一覧を'私のPoVから。 – injecteer

+0

と同じこれはGroovyバグのようです。 – Nikem

+0

... 'リスト Lは= []'作業を行うので、 'リストは'私は何とか期待 '[]' ...同じタイプであるタイプのLHSを有し、この特定の場合には 'null'なので – Dany

答えて

0

は、私はあなたがすべてでジェネリックを使用しないようお勧めします。私にとっては、コンパイルし、ちょうどそのような良い実行されます。

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

しかし、あなたはまだ強く、ジェネリック医薬品は、この試みる必要がある場合:

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