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

Jas*_*son 4 java overloading

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

foo(Object a){...}
foo(String s){...}
Run Code Online (Sandbox Code Playgroud)

然后打电话:

foo(null);
Run Code Online (Sandbox Code Playgroud)

它工作正常.


但是,如果我这样做:

foo(CustomClass a){...}
foo(String s){...}
Run Code Online (Sandbox Code Playgroud)

然后打电话:

foo(null);
Run Code Online (Sandbox Code Playgroud)

Eclipse告诉我它很模糊.所以有两个问题:

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

Roh*_*ain 7

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

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

我该如何解决?

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

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

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

foo((String)null);   
foo((CustomClass)null);
Run Code Online (Sandbox Code Playgroud)