2015-04-16 20 views
2

我想寫一個簡單的通用類Operations<T extends Number>,它有一個單一的方法T sum()。它應該採取任何Number對象,並返回其與T的總和。我強烈懷疑我應該使用有界的通配符,但我不知道如何繼續。如何正確實現通配符參數?

interface OperationsInterface<T extends Number> { 

    public T sum(Operations<? extends Number> v); 

} 

class Operations <T extends Number> 
    implements OperationsInterface<T> { 

    private T o; 

    public Operations(T o) { 
     this.o = o; 
    } 

    @Override 
    public T sum(Operations<? extends Number> v) { 

    } 

} 
+0

我認爲你的代碼不會有任何問題。 – Prashant

回答

1

你甚至不需要:? extends Number作爲方法參數的類型參數。 你的接口可以是這樣的:

interface OperationsInterface<T extends Number> { 

    public T sum(T... t); 

} 

,因爲你無法通過類型參數,這不是的Number一個子類。

而實現類這樣的,即:

class Operations implements OperationsInterface<Integer> { 

    @Override 
    public Integer sum(Integer... t) { 
     // do sum 
     return null; 
    } 

} 
1

如果不希望將參數綁定到T,那麼你當然可以只是做

interface OperationsInterface<T extends Number> { 

    public <N extends Number> T sum(Operations<N> v); 

} 

class Operations <T extends Number> 
    implements OperationsInterface<T> { 

    private T o; 

    public Operations(T o) { 
     this.o = o; 
    } 

    @Override 
    public <N extends Number> T sum(Operations<N> v) { 

    } 

} 

,看看是否工作爲你。