0

我有一个我在下面写的方法。它使用了大量的 instanceof 逻辑,但至少我没有相同方法的 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;
    }
4

2 回答 2

0

就个人而言,我发现如果您有多个重载函数(在您的情况下,每个数字类型一个),它会使代码更具可读性。但是,您所做的是完全有效的。这真的取决于你。想想谁将使用该功能,是否只有您,在这种情况下做任何您想做的事情,因为您知道将要输入哪些数据,或者它将成为库的一部分,在这种情况下您可能只希望允许输入某些内容。在您的示例中,这无关紧要,因为您说过

<T extends Number>

所以它不会接受任何不是数字的东西。然而,规范是使用多个功能只是为了便于阅读。希望这很清楚!

于 2013-10-16T04:53:24.773 回答
0

在架构上,我建议您将您的类抽象化并创建处理具体案例的特定子类。这将使您既可以跳过手动检查类型,又可以轻松添加新操作。

请记住,在您的情况下手动进行检查非常好,因为 Number 子类的数量预计不会改变......

于 2013-10-16T06:00:23.283 回答