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等。 –