我有两个函数调用:一个将字符串作为参数,另一个接受一个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告诉我它很模糊.所以有两个问题:
为什么第一种情况不明确?
那是因为String
是子类型Object
,编译器选择最具体的一个.因此String
选择具有参数的方法.
我该如何解决?
那么,在第二种情况下,由于两个参数类型不在同一继承层次结构中,因此会出现歧义.你无法避免它.因为,null
同样有资格分配给两者types
.编译器之间没有一种特定类型可供选择.
您可以ambiguity error
通过显式转换null
为所需类型来避免.
因此,以下调用将正常工作: -
foo((String)null);
foo((CustomClass)null);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
304 次 |
最近记录: |