احتياط Optional.or()
سلسل احتياطات Optional دون تحققات متداخلة.
مقارنة الكود
✕ Java 8
Optional<Config> cfg = primary();
if (!cfg.isPresent()) {
cfg = secondary();
}
if (!cfg.isPresent()) {
cfg = defaults();
}
✓ Java 9+
Optional<Config> cfg = primary()
.or(this::secondary)
.or(this::defaults);
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
قابل للتسلسل
كدّس الاحتياطات في خط أنابيب مقروء.
تقييم كسول
مورّدو الاحتياط لا يُنفَّذون إلا عند الحاجة.
تصريحي
يُقرأ كـ 'جرّب الأساسي أو الثانوي أو الافتراضي'.
الأسلوب القديم
احتياط متداخل
الأسلوب الحديث
سلسلة .or()
منذ JDK
9
الصعوبة
متوسط
دعم JDK
احتياط Optional.or()
متاح
متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)
كيف يعمل
يُرجع Optional.or() الـ Optional الأصلي إذا كان يحتوي قيمةً وإلا يُقيّم المورّد للحصول على Optional بديل. المورّدون كسولون — لا يُستدعَون إلا عند الحاجة.
توثيق ذو صلة