我有两个函数调用:一个将字符串作为参数,另一个接受一个Object。当我这样做时:
foo(Object a){...}
foo(String s){...}
然后致电:
foo(null);
它工作正常。
但是,如果我这样做:
foo(CustomClass a){...}
foo(String s){...}
然后致电:
foo(null);
Eclipse告诉我它很模糊。所以有两个问题:
答案 0 :(得分:7)
为什么第一种情况不明确?
那是因为String
是Object
的子类型,编译器会选择最具体的子类型。因此选择了String
参数的方法。
我该如何解决?
那么,在第二种情况下,由于两个参数类型不在同一继承层次结构中,因此会出现歧义。你无法避免它。因为null
同样有资格分配给types
。编译器没有一种特定类型可供选择。
您可以通过将ambiguity error
明确地转换为所需类型来避免null
。
因此,以下调用将正常工作: -
foo((String)null);
foo((CustomClass)null);