5

次のようなコンストラクタが必要です。

public Attribute(String attrName, Number attrValue){
    this.name = attrName;
    this.value = attrValue;
}

これには、値に n を追加する incrementValue(Number n) というメソッドが必要です。キャストに問題がある可能性があるため、2 つの Number オブジェクトを一緒に追加できないことはわかっています。ただし、値を保証するためにチェックを使用し、n が同じ型である場合、これらを加算することは可能ですか? または、これについてもっと良い方法があるかもしれません。

現在、Integer と Double のインスタンス変数を宣言し、値を正しい型に割り当てています。Number の任意のサブクラスを許可するようにこれを拡張することについて疑問に思っていました。明らかに、それぞれに個別のメソッドを作成できますが、それは悪いプログラミングのようです。

これはJavaで可能ですか?私はこれについて完全に間違っていますか?

4

2 に答える 2

5

すべての s を単一のタイプに変換Numberできます(double損失が最小です)。

class Attribute {

    private double value;

    public Attribute(String attrName, Number attrValue) {
        this.name = attrName;
        this.value = attrValue.doubleValue();
    }

}

しかし、IMO では、コンストラクターをオーバーロードするだけのほうがよいでしょう。Number私の経験では、本当に非常に有用なクラスではありません(そう考えているのは私だけではないようです)。

class Attribute {

    public Attribute(String attrName, int attrValue) {
        this.name = attrName;
        this.value = attrValue;
    }

    public Attribute(String attrName, double attrValue) {
        this.name = attrName;
        this.value = attrValue;
    }
}
于 2012-04-27T02:49:42.317 に答える
0

いいえ、Java ではできません。あなたができる最善のことは、Numberあなたが知っているすべてのケースを経験することです.

Numberそれが不可能なサブクラスを書くことは確かにできましたが、それは少し無意味な実装になります。

于 2012-04-27T02:47:00.003 に答える