0

次のシナリオ、2 つの関数をテストしました。

// method A
private void make(Object ...objects ){
    System.out.println("varargs make");
}

// method B
private void make(){
    System.out.println("non varargs make");
}

コールでmake()

2 つのメソッドのうち 1 つだけがコードに存在する場合は、それが呼び出されます。ただし、両方のメソッドが存在する場合は、メソッド B のみが呼び出されます。

あと 2 つの理論的な質問と 1 つの実用的な質問があります。

1) コンパイラが A に対して B を「好む」理由は何ですか?

2) これは意図的なもの (標準) ですか、それともコンパイラの実装の結果ですか?

3) コンパイラにメソッド A を「強制的に」呼び出す方法はありますか?

4

1 に答える 1

6

1) コンパイラが A に対して B を「好む」理由は何ですか?

JLS仕様。最も具体的な一致を優先します (そして、それが何を意味するかについての規則があります)

2) これは意図的なもの (標準) ですか、それともコンパイラの実装の結果ですか?

意図的に。

3) コンパイラにメソッド A を「強制的に」呼び出す方法はありますか?

空またはその他のオブジェクト配列を指定します。

make(new Object[0]);
于 2013-01-10T14:19:46.893 に答える