0
我寫了一個類來爲不同的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處理的東西嗎? –
我寫它是因爲我有另一個關於範圍的類,我將在這裏同時使用Integer,Long和Double。我需要爲該類中的方法執行數字操作,但我不想編寫3個類,如RangeInt,RangeDouble等。 –