لماذا لا يتم النظر في أنواع العائدات في أحمال طريقة Java؟

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

سؤال

لماذا لا يتم النظر في نوع إرجاع الطريقة في التحميل الزائد؟ هل يمكن لأحد أن يشرح ، كيف يتحقق البرمجيات للطرق المحملة؟

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

المحلول

لماذا لا يتم النظر في نوع إرجاع الطريقة في التحميل الزائد؟

السبب الرئيسي هو أنه إذا كنت فعل النظر في هذا ، تصبح الكثير من مكالمات الوظائف غامضة إذا لم يتم تعيين قيمة الإرجاع لشيء ما. على سبيل المثال ، ما هي استدعاء الوظيفة التي يتم استدعاؤها هنا؟

public String x() { ... }
public int x() { ... }

// ...

x();  // <-- Which one did you mean? It's impossible to tell if you
      //     allow return types to be part of method overloads.

هناك أسباب أخرى لعدم الرغبة في القيام بذلك أيضًا. ومع ذلك ، العديد من اللغات فعل السماح لتوقيعاتهم أن تختلف فقط في نوع العودة ؛ هاسكل وبيرل مثالان. إذا كانت لغتك تسمح بذلك ، فليس من الصعب أن ترى أن كل ما تحتاجه لدعم هذا هو خطوة أخرى في عملية الدقة الخاصة بك: ببساطة لديك طريقة واضحة للمترجم لتحديد طريقة أو أخرى. في المثال أعلاه ، ربما نحدد أولوية (ربما الطريقة الأولى المحددة هي الطريقة التي تفوز بها ، على سبيل المثال ، لذلك لدينا x() سوف تستدعي المكالمة String x()).

شيء آخر يجب ملاحظته هو أن JVM يفعل السماح بطريقتين يختلف توقيعهما فقط في نوع العودة. (هذه هي الطريقة التي تقوم بها Scala ولغات JVM الأخرى التي تدعم ذلك.

نصائح أخرى

هل يمكن لأحد أن يشرح ، كيف يتحقق البرمجيات للطرق المحملة؟

سيحتوي مواصفات لغة Java ، القسم 8.4.9 ، على الإجابة النهائية (ولكن الفنية للغاية):http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.9

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