为什么在java方法中使用instanceof运算符建议重载方法?

时间:2013-10-16 03:39:24

标签: java generics overloading

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

2 个答案:

答案 0 :(得分:0)

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

<T extends Number>

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

答案 1 :(得分:0)

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

请记住,在您的情况下手动执行检查完全没问题,因为预期Number子类的数量不会改变...