Optional.orElseThrow() بدون مورّد
استخدم Optional.orElseThrow() كبديل أوضح وكاشف للنية عن get().
مقارنة الكود
✕ Java 8
// Risky: get() throws if empty, no clear intent
String value = optional.get();
// Verbose: supplier just for NoSuchElementException
String value = optional
.orElseThrow(NoSuchElementException::new);
✓ Java 10+
// Clear intent: throws NoSuchElementException if empty String value = optional.orElseThrow();
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
موثّقة ذاتياً
orElseThrow() تُشير بوضوح إلى أن الغياب غير متوقع.
تتجنّب get()
أدوات التحليل الثابت تُعلّم get() بأنها خطرة؛ orElseThrow() هي الأسلوب الصحيح.
كليشيه أقل
لا حاجة لتمرير مورّد للاستثناء الافتراضي NoSuchElementException.
الأسلوب القديم
get() أو orElseThrow(supplier)
الأسلوب الحديث
orElseThrow()
منذ JDK
10
الصعوبة
مبتدئ
دعم JDK
Optional.orElseThrow() بدون مورّد
متاح
متاح منذ JDK 10 (مارس 2018).
كيف يعمل
يُعدّ Optional.get() على نطاق واسع من علامات التدهور لأنه يُخفي احتمالية الفشل. تُؤدي orElseThrow() بدون وسائط المضافة في Java 10 نفس العمل لكن مع نية صريحة: المطوّر يتوقع قيمةً ويريد استثناءً إذا كانت غائبة.
توثيق ذو صلة