2013-04-24 2 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

+0

@ TheEwook 아니요, OP는 익명의 클래스 인스턴스를 반환합니다. –

답변

5

컴파일러의 일반 형식 유추에서 중첩 된 와일드 카드 캡처가 질식합니다. 명시 적으로 형식 인수를 지정해야합니다.

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