4

我有两个函数调用:一个以字符串作为参数,另一个以对象为参数。当我这样做时:

foo(Object a){...}
foo(String s){...}

然后调用:

foo(null);

它工作正常。


但是,如果我这样做:

foo(CustomClass a){...}
foo(String s){...}

然后调用:

foo(null);

Eclipse 告诉我它是模棱两可的。所以两个问题:

  1. 为什么第一个案例不模棱两可?
  2. 我该如何解决?
4

1 回答 1

7

为什么第一个案例不模棱两可?

那是因为String是 的子类型Object,编译器会选择最具体的一个。因此String选择了带参数的方法。

我该如何解决?

好吧,在第二种情况下,由于两个参数类型不在同一个继承层次结构中,你会得到歧义。你无法避免它。因为,null同样有资格分配给types. 编译器没有一种特定的类型可供选择。

您可以ambiguity error通过显式转换null为所需的类型来避免。

因此,以下调用将正常工作:-

foo((String)null);   
foo((CustomClass)null);
于 2012-12-04T14:39:25.387 回答