【发布时间】:2020-01-18 18:45:22
【问题描述】:
我想知道是否可以通过改变泛型参数来重载方法。示例:
class Foo <T> { ... }
class Bar {
public void do (Foo<Integer> obj) {}
public void do (Foo<Double> obj) {}
}
我知道这不会被编译。但是例如在 kotlin 中,您有注释 JvmName,您可以在其中注释这些方法以编译代码。 Java也有这种可能性吗?
【问题讨论】:
-
没有。类型擦除。
Foo<Anything>变成Foo<Object>,因为它必须。 -
处理此问题的正确方法是处理
Foo<Number>并在必要时区分方法中的类型。 -
不,这在 java 中是不可能的。从注释中,我怀疑注释重命名了字节码中的方法,从而使调用明确。我建议重命名这些方法,以便它们的名称彼此不同。
-
Java 泛型存在缺陷,不如 C# 中使用的泛型强大。
-
@HovercraftFullOfEels 这就是向后兼容的代价。 C# 不必做出这样的选择。
标签: java overloading