異なるNumberクラスに対してnumber演算を実行するクラスを記述します。しかし、すべてのリターンステートメントでタイプセーフティ警告が表示されます。Javaの数値演算で型安全警告を回避するにはどうすればよいですか?
私はすでに知っているようにreturn文が型安全性の問題を引き起こすのはなぜですか?例えばsummand1とsummand2の両方がDoubleのインスタンスですか?どのように警告を避けることができますか?
public class NumberOperation {
public static <R extends Number & Comparable<R>> R addition(R summand1, R summand2) {
if (!summand1.getClass().equals(summand2.getClass()))
throw new IllegalArgumentException("Two different classes are used in the parameters: " + summand1.getClass().getName() + ", " + summand2.getClass().getName());
if(summand1 instanceof Double && summand2 instanceof Double)
return (R) new Double(summand1.doubleValue() + summand2.doubleValue());
else if(summand1 instanceof Float && summand2 instanceof Float)
return (R) new Float(summand1.floatValue() + summand2.floatValue());
else if(summand1 instanceof Long && summand2 instanceof Long)
return (R) new Long(summand1.longValue() + summand2.longValue());
else if(summand1 instanceof Integer && summand2 instanceof Integer)
return (R) new Integer(summand1.intValue() + summand2.intValue());
else if(summand1 instanceof Short && summand2 instanceof Short)
return (R) new Short((short) (summand1.shortValue() + summand2.shortValue()));
else if(summand1 instanceof Byte && summand2 instanceof Byte)
return (R) new Byte((byte) (summand1.byteValue() + summand2.byteValue()));
else
throw new IllegalArgumentException(summand1.getClass().getName() + " is not supported.");
}
}
なぜこのような記述ですか? – mlecz
ここにBigDecimalで処理できないものはありますか? –
私は範囲についての別のクラスを持っているので、私はそれを書いて、私は両方の整数、長いとダブルを使用します。私はそのクラスのメソッドの数値演算を行う必要がありますが、私はRangeInt、RangeDoubleなどの3つのクラスを記述したくありません。 –