java方法重载不能使用不同的参数
为什么不允许这样做并将其视为同一个签名
public Object myMethod(Map<String, String[]> values) {
return this;
}
public Object myMethod(Map<String, String> values) {
return this;
}
你可以在下面搜索框中键入要查询的问题!
为什么不允许这样做并将其视为同一个签名
public Object myMethod(Map<String, String[]> values) {
return this;
}
public Object myMethod(Map<String, String> values) {
return this;
}
# 1 楼答案
这是因为Type Erasure。类型擦除会在编译时删除大部分泛型信息。因此,编译后的上述代码将是
所以这两种方法在运行时是相同的
# 2 楼答案
城市神话的答案是:
然而,实际的答案似乎更复杂。从a duplicate question看到这个excellent answer。考虑到提供的参数,编译器实际上完全能够选择正确的重载方法,然而,支持遗留的非泛型代码的要求迫使
javac
开发人员禁止它