3

このコードを見てください:

public class Test {
public static void main(String... args) {
    flipFlop("hello", new Integer(4), 2004);
    // flipFlop("hello", 10, 2004); // this works!
}

private static void flipFlop(String str, int i, Integer iRef) {
    System.out.println(str + " (String, int, Integer)");
}

private static void flipFlop(String str, int i, int j) {
    System.out.println(str + " (String, int, int)");
}

}

コンパイラは、呼び出しがあいまいであるというエラーを返します。

説明 リソース パス 場所 タイプ メソッド FlipFlop(String, int, Integer) は、タイプ Test に対してあいまいです Test Test.java scjp19 - inheritence/src 行 3 Java 問題

ただし、コメントアウトされた行がフリップフロップを呼び出すために使用されている場合、メソッドは明確に呼び出されます (2 つ目は、プリミティブ自体を使用した後にオートボクシングが行われるためです)。

2 番目の引数がいずれかの方法でボックス化解除されることをコンパイラが確認し、3 番目の引数に応じてどのメソッドを呼び出す必要があるかを判断することを期待します。なぜこれが起こらないのですか?根拠は何ですか?

4

4 に答える 4

6

コメント行はflipFlop(String str, int i, int j)正確に一致します。オートボクシングにより、他の行は両方に一致します。

于 2010-03-07T17:12:18.623 に答える
1

FlipFlop("こんにちは", 新しい Integer(4), 2004); FlipFlop(String str, int i, Integer iRef) と互換性がありません

于 2010-03-07T17:24:15.407 に答える
0

Java 5 以降では自動ボクシング (Integer を int に変換) が行われるため、この結果が得られます。

于 2010-03-07T17:44:23.023 に答える
-1

はい、ques に準拠して、呼び出しは int / Integer @ 3 番目の引数の違いに依存する必要があります。 ただし、ここでは、2 番目の引数が autoUnboxed の場合、3 番目の引数の違いも重要です。

これでも機能します: FlipFlop("hex", new Integer(4), new Integer(17));

syntex および auto box 機能に準拠している間、これは :: "private static void FlipFlop(String str, int i, Integer iRef) " メソッドを呼び出す必要がありますが、それが言っているのは AMBIGUOUS .....??

于 2011-12-31T04:45:24.220 に答える