java.lang.Numberを多態的に使用しようとしています。複数のDouble、Integerなどのインスタンスを配置するリストがあり、それらに対して多態的に算術演算を実行したいと思います(たとえば、Numberごとにdouble)。
java.lang.Numberを使用した自動ボクシング機能はありません。また、サンプルソースコードに-それほどポリモーフィックではない-メソッドmultiply(Number n、int factor)を使用せずに、これを行うためのより良い方法を見つけていません。次のようになります...そしてこの実装では、各算術演算(加算、減算など)のメソッドが必要になります。
編集-質問の強化:抽象化の観点からjava.lang.Numberを考えると、任意の数値を算術演算の一部にできると思いますが、それでも、加算/減算/する簡単な方法は存在しないようです。タイプ(Integer、Double、Short ...)に関係なく、multiply /etcxを数値のリストに追加します。
より良いアイデアはありますか?前もって感謝します ;)
サンプルソースコード:
public class NumberTest {
private List<Number> list = new ArrayList<Number>();
public static void main(String args[]) {
new NumberTest().start();
}
protected void start() {
this.fillList();
Number num;
for (int i = 0; i < list.size(); i++) {
num = this.multiply(list.get(i), 2);
list.set(i, num);
}
System.out.println(this.toString());
}
private void fillList() {
list.add(new Byte((byte) 12));
list.add(new Short((short) 20));
list.add(new Integer(30));
list.add(new Long(40));
list.add(new Float(50.123));
list.add(new Double(60.123));
}
private Number multiply(Number n, int factor) {
if (n instanceof Byte) {
n = n.byteValue() * factor;
} else if (n instanceof Short) {
n = n.shortValue() * factor;
} else if (n instanceof Integer) {
n = n.intValue() * factor;
} else if (n instanceof Long) {
n = n.longValue() * factor;
} else if (n instanceof Float) {
n = n.floatValue() * factor;
} else if (n instanceof Double) {
n = n.doubleValue() * factor;
}
return n;
}
@Override
public String toString() {
String result = "";
for (Number num : list) {
result += num+"\n";
}
return result;
}