2010-10-19 14 views
3

引用的參數化類型我試圖找出如何引用參數化接口作爲註釋屬性:從註解

public class Example { 
    public interface MyService<T extends Number> { 
     T someNumber(); 
    } 

    public class BaseServiceImpl<T extends Number> implements MyService<T> { 
     @Override 
     public T someNumber() { 
      return null; 
     } 
    } 

    public @interface ServiceType { 
     Class<? extends MyService<?>> value(); 
    } 

    @ServiceType(BaseServiceImpl.class) 
    public static void main(String[] args) { 
     System.out.println("Hello World"); 
    } 
} 

上面的代碼失敗,在@ServiceType註釋的類型不匹配。我相信問題出在我爲value屬性指定的邊界上。我也注意到,當一個類型不通用時,它可以正常工作;例如@ServiceType(IntegerService.class)作品給出:

public class IntegerService extends BaseServiceImpl<Integer> { /* ... */ } 

缺少什麼我得到擺脫失配誤差的努力提供泛型類型是什麼時候?

回答

0

我想註釋的接口應界定如下:

 
public @interface ServiceType { 
     Class<? extends MyService<? extends Number>> value(); 
} 
3

的問題是,類文字是指原料類類型。那就是BaseServiceImpl.classClass<BaseServiceImpl>,而不是Class<BaseServiceImpl<? extends Number>>。將返回類型的值更改爲Class<? extends MyService>並且應該編譯。