4

2 つの関数呼び出しがあります。1 つはパラメーターとして文字列を受け取り、もう 1 つはオブジェクトを受け取ります。私がこれを行うとき:

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

そして、次のように呼び出します。

foo(null);

それは正常に動作します。


ただし、これを行うと:

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

そして、次のように呼び出します。

foo(null);

Eclipse は、あいまいであると教えてくれます。2つの質問:

  1. 最初のケースがあいまいではないのはなぜですか?
  2. どうすれば修正できますか?
4

1 に答える 1

7

最初のケースがあいまいではないのはなぜですか?

これStringは、 が のサブタイプでありObject、コンパイラが最も具体的なものを選択するためです。したがって、Stringパラメーターを持つメソッドが選択されます。

どうすれば修正できますか?

2 番目のケースでは、2 つのパラメーター型が同じ継承階層にないため、あいまいさが生じます。避けることはできません。nullは、両方に等しく割り当てられる資格があるためtypesです。コンパイラが選択できる特定の型はありません。

ambiguity error必要な型に明示的にキャストすることで、これを回避できますnull

したがって、以下の呼び出しは正常に機能します: -

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