ما هي تصاميم Java التي تتم صراحة لدعم متوافق مع الوراء؟ [مغلق

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

  •  12-09-2019
  •  | 
  •  

سؤال

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

والذي يتم توثيق قرارات التصميم المحددة في جافا بالطريقة التي لم يفعلوا ذلك لأن ذلك كان قرار التصميم المفضل، بل لأنه كان من الضروري دعم التوافق الخلفي.

الحالة الواضحة هي الأردن، حيث لا يمكنك الكشف عن المعلمة النوع في وقت التشغيل. (لذلك لا يمكنك القيام به:

 public void addEmptyMember(List<?> someList) {
      if (someList instanceof List<String>) {
            ((List<String>) someList).add("");
      }
 }

ما هي الأمثلة الأخرى الموجودة في تصميم اللغة و API القياسية؟

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

المحلول

نظرا لأن هذا السؤال ليس لديه إجابة واحدة واحدة، لست متأكدا مما إذا كانت ستكون أفضل من سؤالك الآخر.

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

ربما يكون بناء جملة الحلقة الجديد قراءته for (item in List), ، ولكن هذا سيكون له علاقة صنع in في كلمة محجوزة. هذا من شأنه أن يسبب العديد من مشاكل التوافق الخلفية، وليس أقل عدد منها حقيقة أن System.in يجب إعادة تسمية.

varargs و peroboxing كل من إمكانيات الغموض. على سبيل المثال، إذا تجاوزت مجموعة من الكائنات إلى طريقة تقبل Object... هل هذا يعني أنه يجب تمرير الصفيف كصفيف Vararg أو كعنصر من صفيف Vararg؟ هذا يصبح أكثر تعقيدا إذا كانت هناك حمولة زائدة. يحتوي Autoboxing على مشاكل غموض مماثلة في التحميل الزائد. كان الحل لكلا المشكلتين هو جعلها قاعدة عند حلها عند حل الأسلوب مكالمات يتم حلها لأول مرة مع قواعد ما قبل 1.5 (IE: لا Object... يتم التعامل معها على النحو التالي Object[]). فقط إذا كان لا يمكن حل مكالمات الطريقة مع قواعد ما قبل 1.5 هي قواعد 1.5 الجديدة التي تم النظر فيها.

نصائح أخرى

هناك الكثير من الأمثلة في المكتبة القياسية

  • java.awt.color لديه نفس الثوابت مع الأسماء الكبيرة والصغيرة
  • جميع الأساليب المهملة في java.util.date نظرا لإدخال java.util.calendar - ما هي الفوضى!
  • java.util.enumeration لا يزال يستخدم حيث java.util.iterator يمكن أن يحل محلها
  • الفصول في الأرجوحة التي تقبل المتجهات كحجج ولكن كان يمكن أن يكون لديه دعم إضافي ل java.util.collection

آخر واحد سيكون كل الفصول والأساليب التي يتم إهمالها لعدة إصدارات الآن، ولكن فقط لن تذهب بعيدا. معظم البارواز هي طرق الخيط المختلفة، التي يتم إهمالها.

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