لماذا يحظر ImmutableList.of() والأصدقاء العناصر الفارغة؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

ملخص إلى حد كبير يقول كل شيء.إليك مقتطف التعليمات البرمجية ذي الصلة في ImmutableList.createFromIterable():

  if (element == null) {
    throw new NullPointerException("at index " + index);
  }

لقد واجهت هذا عدة مرات ولا أستطيع أن أرى لماذا تفرض وظيفة المكتبة ذات الأغراض العامة هذا القيد.

تحرير 1:بواسطة "الأغراض العامة"، سأكون سعيدًا بـ 95٪ من الحالات.لكنني لا أعتقد أنني كتبت 100 مكالمة إلى ImmutableList.of() حتى الآن، وقد تعرضوا للعض من هذا أكثر من مرة.ربما أنا منعزلة، رغم ذلك.:)

تحرير 2:أعتقد أن شكواي الكبيرة هي أن هذا يخلق "فواقًا" عند التفاعل مع المعيار java.util مجموعات.كما أشرت في حديثك، مشاكل مع nullيمكن أن تظهر العناصر الموجودة في المجموعات بعيدًا عن مكان إدراج تلك القيم الخالية.ولكن إذا كان لدي سلسلة طويلة من التعليمات البرمجية التي تضع القيم الخالية في مجموعة قياسية في أحد الأطراف وتتعامل معها بشكل صحيح في الطرف الآخر، فلن أتمكن من استبدال فئة مجموعات Google في أي وقت على طول الطريق، لأنه سيتم ذلك على الفور اقذف ال NullPointerException.

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

المحلول

لقد شرحت ذلك في 25 دقيقة من هذا الفيديو:http://www.youtube.com/watch?v=ZeO_J2OcHYM

آسف على الإجابة البطيئة، ولكن هذا في النهاية مجرد سؤال "لماذا" (يمكن القول إنه غير مناسب لـ StackOverflow؟).

يحرر: إليك نقطة أخرى لست متأكدًا من أنني أوضحتها في الفيديو:الإجمالي (عبر جميع أكواد Java العالمية)، وكمية التعليمات البرمجية الإضافية التي يجب كتابتها لتلك الحالات الخالية من الأخطاء لاستخدام الاستعدادات القديمة Collections.unmodifiableList(Arrays.asList(...)) إلخ.يغمره المبلغ الإجمالي (عبر جميع أكواد Java العالمية) الإضافية checkArgument(!foos.contains(null)) المكالمات التي سيحتاج الجميع إلى إضافتها إذا لم تعتني مجموعاتنا بذلك نيابةً عنك.معظم استخدامات المجموعة، وفقًا لـ FAR، لا تتوقع وجود أي قيم خالية، ويجب أن تفشل بسرعة إن وجدت.

نصائح أخرى

في عام في مجموعات جوجل المطورين من المجموعة التي لا نعتقد أن القيم الخالية ينبغي أن تكون معلمة للأغراض العامة المتوقعة.

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

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