2016-04-08 11 views
0

私はいくつかのプログラム分析を実装するJavaプログラムを書いています。その一環として、私が分析しているプログラムの中に「値」を表す型が必要です。値は、私の目的のためには単なる整数です。しかし、int/Integerはわかりやすい名前ではないので、コード内でint/Integerの型を使用しないでください。私はむしろValueと書きます。私はよう整数型の類義語ですか?

class Value extends Integer {} 

と行うことを書くために、次にでしょう。しかし、Integerが最終クラスであるため、これは機能しません。だから私の現在のソリューションは、私のValueクラスにintフィールドし、手動で実装されるすべての様々な標準的な方法を与えることです:私は本当にただIntegerのように動作しますが、持つクラスを探していたときに

class Value { 
    int val; 
    public String toString() {...} 
    public int hashCode() {...} 
    public boolean equals(...) {...} 
    ... 
} 

これはやり過ぎのように感じていますよりわかりやすい名前。

ここには何がありますか?

+4

なぜ*値* * *整数よりわかりやすいでしょうか?それはもっと曖昧です。 – Manu

+2

であり、「あまり記述的でない整数」の観点からは、「Double」、「Long」なども技術的にも値である可能性があるので、「Value」はどのようにして「Integer」なのでしょうか? – SomeJavaGuy

+3

"Integer"を "サブクラス化"したい理由は、その振る舞いを変更したいがその名前を変更するだけなので、そうではありませんか?それはサブクラス化が意図しているものではありません。ちょうど '整数 'をつけてください。 –

答えて

1

プロキシでほとんど何をラップすることができます:

class Value<T extends Number> extends Number { 

    final T v; 

    public Value(T v) { 
     this.v = v; 
    } 

    @Override 
    public int intValue() { 
     return v.intValue(); 
    } 

    @Override 
    public long longValue() { 
     return v.longValue(); 
    } 

    @Override 
    public float floatValue() { 
     return v.floatValue(); 
    } 

    @Override 
    public double doubleValue() { 
     return v.doubleValue(); 
    } 

    @Override 
    public String toString() { 
     return v.toString(); 
    } 

    @Override 
    public int hashCode() { 
     return v.hashCode(); 
    } 

    @Override 
    public boolean equals(Object obj) { 
     return v.equals(obj); 
    } 

} 
+0

ありがとうございますが、これは私が欲しいものではありません。私は、私の 'Value'が' Integer'として実装されているという事実を不明瞭にしたいと思います。あなたの「価値」はその事実を全員に宣伝します。 –

関連する問題