2013-04-24 81 views
1

我不是下面爲什麼這個代碼顯示了這個編譯錯誤。結束語一個<?>類泛型類型錯誤

錯誤是:

Type mismatch: cannot convert from TestClass.Wrapper<List<capture#1-of ?>> to TestClass.Wrapper<List<?>>

代碼如下。

package test.cls; 

import java.util.List; 

public class TestClass 
{ 
    static abstract class Wrapper<A> 
    { 
     public abstract A wrapped(); 
    } 

    public static <A> Wrapper<A> wrap(final A val) 
    { 
     return new Wrapper<A>() 
     { 
      public A wrapped() 
      { 
       return val; 
      } 
     }; 
    } 

    public static void main(final String[] args) 
    { 
     final List<?> list = null; 
     final Class<?> c = null; 
     final Wrapper<List<?>> wrapList = wrap(list); // Error here 
     final Wrapper<Class<?>> wrapC = wrap(c); // Error here 
    } 
} 
+0

您是否試圖實例化抽象類? – TheEwook 2013-04-24 23:15:02

+0

@TheEwook沒有,OP的返回一個匿名類的實例。 – 2013-04-24 23:27:25

回答

5

編譯器的泛型類推斷在嵌套的通配符捕獲上窒息。您需要明確指定類型參數:

final Wrapper<List<?>> wrapList = TestClass.<List<?>>wrap(list); 
final Wrapper<Class<?>> wrapC = TestClass.<Class<?>>wrap(c);