我想知道你是否可以在这里提出建议。
我想有两种方法:
doSomething(List<Data>) and
doSomething(List<Double>)
由于参数类型相同,Java正在抱怨
有没有办法以某种方式使这种重载发生?
答案 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)
丑陋,但确实有效。
作为替代方案,您可以为方法指定不同的名称。