=====《求求大神帮我优化下啊,我写的太烂了》====
public static void main(String[] args) {
Number[] num1 = {2, 3, 3, 4, 5}; //Integer
Number[] num2 = {1.1, 2.0, 3.0, 4.0, 5.0}; //Double
System.out.println(num1[0].getClass().getTypeName());
System.out.println(new ArraysTest().ArraysSum(num2));
}
public static <T extends Number> T ArraysSum(T[] num) {
System.out.println(num.getClass().getTypeName());
Double sum = 0.0;
for (int i = 0; i < num.length; i++) {
sum += num[i].doubleValue();
}
if (num[0].getClass().getTypeName().equals("java.lang.Integer")){
Integer result = (int)((double)sum);
return (T)result;
}
if (num[0].getClass().getTypeName().equals("java.lang.Double")){
Double result = sum.doubleValue();
return (T)result;
}
return (T)sum;
}
如何结合instanceof 更加智能的判断?
这种设计没有用好面向对象的多态, 代码可读性差,作为公共接口也很难让人理解和调用; 使用方法重载会有更好的体验。
Number的子类还有BigDecimal, 显然BigDecimal和Integer的加法运算是不同的。
使用instanceof也只能简化if中的条件代码,没有本质区别。