2012-10-28 44 views
1

我不擅長Java,所以我認爲我的問題是基本的。我正在爲ArrayResult之類的東西寫一個接口。將會有方法添加和獲取。Java接口方法 - 參數和返回值類型作爲孩子的號碼

問題是ArrayResult可以獲取整數或雙精度值。所以我需要更一般地定義接口中的方法。我發現有可能有這樣的get方法:

public <N extends Number> N get(Integer index); 

這是正確的嗎?我相信這意味着get方法可以返回任何擴展Number對象的東西。添加方法使用的是哪個sytax?

public void add(Number value); 

這不是我想要的,因爲add(整數值)不覆蓋接口方法。

回答

3

我想你想要的是

interface ArrayResult<N extends Number> { 
    public N get(Integer index); 

    public void add(N value); 
} 

然後,你可以寫兩個單獨的具體實施者

class IntegerResult implements ArrayResult<Integer> { 
    @Override 
    public void add(Integer value) { 
    } 

    @Override 
    public Integer get(Integer index) { 
     return null; 
    } 
} 

class DoubleResult implements ArrayResult<Double> { 
    @Override 
    public void add(Integer value) { 
    } 

    @Override 
    public Double get(Double index) { 
     return null; 
    } 
} 

參考文獻:

+0

也許吧。我嘗試了你的建議,但是當我用add(Integer)覆蓋add方法時。它不起作用。它說它需要實現add(Number)。 – Macejkou

+0

@Macejkou檢查更新。 –

+0

您需要創建一個實現類,用類定義中的替換。 – breezee

2
interface ArrayResult<N extends Number> { 
    public N get(Integer index); 

    public void add(N value); 
} 
0

只需返回Number

Number get(Integer index); 

這也將讓您返回任何Number後代像IntegerDouble。在Java父類型中可以包含任何後代類型。

在getter參數中也使用整數型int

Number get(int index) 

此外,您可以使用預定義的類,如Vector<Number>與所需的功能。

public Vector<Number> myfunction() { 

    Vector<Number> ans = new Vector<Number>(); 
    ans.add(new Integer(1)); 
    ans.add(new Double(3.14)); 

    return ans; 

} 
+0

謝謝。我瞭解收藏。我有更復雜的問題,並簡化了我的問題。 – Macejkou

相關問題