1

我有这个 getResult() 输入参数略有变化。one Mapvalue 作为字符串数组 one 和字符串 anor 。

但我看到一个错误:不会重载支持泛型?

public class App 
{

public void getResult(Map<String, String[]> map) {

}
public void getResult(Map<String, String> map) {

}

}

我看到这个错误:方法 getResult(Map) 具有与 App 类型中的另一个方法相同的擦除 getResult(Map) 我猜 java 将两者都视为 Maps,这个错误也是如此。

模仿这种行为的最佳方法是什么?

谢谢

4

2 回答 2

4

重载的规则之一是具有类型参数的方法在擦除后不能具有相同的签名。请参阅Java 语言规范,第 8.4.8.3 节。规范中的相关文本是:

如果类型声明 T 具有成员方法 m 1并且存在在 T 中声明的方法 m 2或 T 的超类型,则这是编译时错误:. . m 1或某些方法 m 1覆盖(直接或间接)的签名与 m 2或某些方法 m 2覆盖(直接或间接)的签名具有相同的擦除。

于 2012-08-10T20:26:09.367 回答
2

方法参数只考虑对象的类型,而不考虑对象上的任何泛型。因此,无论它们的泛型类型如何,具有 Map 参数的两个方法都将被视为相同。

于 2012-08-10T20:26:26.637 回答