في جاوة، لماذا دعوة FOO () غير غابي معينة 2 طرق Varags Foo (Int ... Ints) و Foo (كائنات ... كائنات)؟

StackOverflow https://stackoverflow.com/questions/951388

سؤال

إذا أعلنت فقط أساليب Varargs فقط على النحو التالي:

public void foo(String... strings) {
    System.out.println("Foo with Strings");
}

و

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

ثم لديك الرمز:

foo();

هذا خطأ مترجم بسبب الغموض كما هو متوقع.

ومع ذلك، إذا كان لدي إصدارات 2 التالية فقط من FOO:

public void foo(Object... objects) {
    System.out.println("Foo with Objects");
}

و

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

ثم الرمز

foo();

يستدعي إصدار Ints من الطريقة. يمكن لأي شخص أن يفسر سبب عدم غمور المثال الثاني بالمثل ولماذا يحل إلى الطريقة الدولية على طريقة الكائن. شكرا.

هل كانت مفيدة؟

المحلول

إذا كنت أتذكر بشكل صحيح من عندما كنت أعد SCJP، في الحالة الأولى، لديك 2 حجج بدون علاقة بينها، لذلك لا يمكن للمترجم اختيار واحد.

في الثانية، مع تمكين الملاكمة (1.5+)، يمكن أن يكون integer عددا صحيحا وهو مجموعة فرعية من الكائن، والترجمة، في حالة الصراع، ستستخدم دائما التعريف الأكثر تحديدا. لذلك يتم إعطاء الأولوية عدد صحيح (int).

نصائح أخرى

ستستخدم Java دائما أقرب نوع ممكن، لذلك عند تمرير Ints في الطريقة، إذا لم يكن لديك WITT ... طريقة، فسوف يتم تشغيلها في أعداد صحيحة واستخدام كائن .... منذ أن هناك int. .. طريقة، سوف تستخدم جافا ذلك أولا. هذا هو الاختيار في تصميم جافا مترجم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top