方法重载

时间:2010-12-21 15:21:56

标签: java overloading

我想知道你是否可以在这里提出建议。

我想有两种方法:

doSomething(List<Data>) and
doSomething(List<Double>)

由于参数类型相同,Java正在抱怨

有没有办法以某种方式使这种重载发生?

5 个答案:

答案 0 :(得分:7)

可悲的是,没有。因为Java通过擦除实现了泛型,所以这两种方法都可以编译为:

doSomething(List)

由于您不能拥有两个具有相同签名的方法,因此无法编译。

你能做的最好的事情是:

doSomethingData(List<Data>)
doSomethingDouble(List<Double>)

或同样令人讨厌的东西。

答案 1 :(得分:3)

public void doSomething(List list) {
    if(list.size() > 0) {
        Object obj = list.get(0);
        if(obj instanceof Data) {
           doSomethingData((List<Data>)list);
        } else if (obj instanceof Double) {
           doSomethingDouble((List<Double>)list);
        }
    }
}

答案 2 :(得分:2)

为什么不用不同的名字命名:

doSomethingDouble(List<Double> doubles);
doSomethingData(List<Data> data);

答案 3 :(得分:1)

泛型仅在编译时可供编译器使用。它们不是执行时构造,因此上面两种方法是相同的,因为在运行时它们也是等同的 doSomething(List)

答案 4 :(得分:0)

由于type erasure,这不起作用。你可以做的一件事是添加一个虚拟参数,如下所示:

doSomething(List<Data>, Data)
doSomething(List<Double>, Double)

丑陋,但确实有效。

作为替代方案,您可以为方法指定不同的名称。