Java函数使用自定义类重载歧义

时间:2012-12-04 14:36:56

标签: java overloading

我有两个函数调用:一个将字符串作为参数,另一个接受一个Object。当我这样做时:

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

然后致电:

foo(null);

它工作正常。


但是,如果我这样做:

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

然后致电:

foo(null);
Eclipse告诉我它很模糊。所以有两个问题:

  1. 为什么第一种情况不明确?
  2. 我该如何解决?

1 个答案:

答案 0 :(得分:7)

  

为什么第一种情况不明确?

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

  

我该如何解决?

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

您可以通过将ambiguity error明确地转换为所需类型来避免null

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

foo((String)null);   
foo((CustomClass)null);