2015-05-19 25 views
0

我有接口:的Java 8通配符仿製藥的麻煩

public interface AddableBox<T> extends Box<T> { 
    public AddableBox<T> add(AddableBox<T> other); 
} 

而且有些類使用它:

public class TestClass { 
     public <T extends AddableBox<?>> void SomeMethod(T a1, T a2){ 
      a1.add(a2); 
    } 
} 

A1和A2例如必須是同一類型。

此代碼生成錯誤:

The method add(AddableBox) in the type AddableBox is not applicable for the arguments (T)

如何解決呢?如果重複,對不起

回答

3

問題是您在聲明類型參數T的綁定AddableBox中使用的通配符。一個AddableBox<?>不能與另一個AddableBox<?>相同,並且您的add方法在AddableBox中要求它們相同。可以使用T本身作爲綁定的類型參數。更改

public <T extends AddableBox<?>> void SomeMethod(T a1, T a2){ 

public <T extends AddableBox<T>> void SomeMethod(T a1, T a2){ 
+0

好吧,我明白了。以前的方法的版本是:'公共,T>空隙的someMethod(TValue A1,A2 TValue){ \t \t \t a1.add(A2); ''。有可能使用一個通用的參數? –

+0

rgettman這樣做與一個參數似乎工作... –

+0

但我不明白它如何使用。例如,我想使用AddableBox 。整數不擴展AddableBox ... –