1

私はJavaにあまり熟練していないので、私の質問は基本的なものだと考えています。ArrayResult のようなインターフェイスを作成しています。メソッド add と get があります。

問題は、ArrayResult が Integer または Double の値を取得できることです。したがって、より一般的にインターフェイスでメソッドを定義する必要があります。get メソッドに次のようなものを使用できることがわかりました。

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

あれは正しいですか?これは、get メソッドが Number オブジェクトを拡張するものを何でも返すことができることを意味すると思います。add メソッドに使用する構文は?

public void add(Number value);

add(Integer value) はインターフェイスメソッドをオーバーライドしないため、これは私が望むものではありません。

4

3 に答える 3

3

私はあなたが望むものだと思います

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

    public void add(N value);
}

次に、2 つの個別の特定の実装者を作成できます。

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;
    }
}

参考文献:

于 2012-10-28T11:16:32.197 に答える
2
interface ArrayResult<N extends Number> {
    public N get(Integer index);

    public void add(N value);
}
于 2012-10-28T11:18:42.570 に答える
0

戻るだけNumberです。

Number get(Integer index);

これにより、やNumberのような子孫を返すこともできます。Javaでは、親タイプは任意の子孫タイプを保持できます。IntegerDouble

intまた、getter引数で整数型を使用します。

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;

}
于 2012-10-28T11:30:30.920 に答える