我有一个方法,我在下面写。它使用了大量的逻辑实例,但至少我没有相同方法的4个重载版本。以下方法可能出现什么问题?为什么重载方法优于使用instanceof?
public static <T extends Number> Number SumVector(List<? extends Number> vector){
if (vector.get(0) instanceof Integer){
Integer retVal = 0;
for (Number val : vector){
retVal = retVal+ ((Integer) val).intValue();
}
return retVal;
}
if (vector.get(0) instanceof Double){
Double retVal = (double) 0;
for (Number val : vector){
retVal = retVal+ ((Double) val).doubleValue();
}
return retVal;
}
if (vector.get(0) instanceof Float){
Float retVal = (float) 0.0;
for (Number val : vector){
retVal = retVal+ ((Float) val).floatValue();
}
return retVal;
}
return null;
}
答案 0 :(得分:0)
就我个人而言,如果你有多个重载函数(在你的情况下,每个数字类型一个),我发现它使代码更具可读性。但是你所做的完全有效。它真的取决于你。考虑一下谁将使用该功能,是否只是你,在这种情况下做任何你想做的事情,因为你知道将要进入哪些数据,或者它将成为图书馆的一部分,在这种情况下你可能只想要允许输入某些东西。在你的例子中,它应该无关紧要,因为你说
<T extends Number>
所以它不会采取任何不是数字的东西。然而,规范是使用多种功能只是为了便于阅读。希望很清楚!
答案 1 :(得分:0)
在架构上,我建议你使你的类抽象化并创建处理具体案例的特定子类。这将使您既可以手动检查类型,也可以轻松添加新操作。
请记住,在您的情况下手动执行检查完全没问题,因为预期Number子类的数量不会改变...