ฉันได้ทำงานกับประเภทตัวเลือกใหม่ใน Java 8และฉันได้พบกับสิ่งที่ดูเหมือนเป็นการดำเนินการทั่วไปที่ไม่รองรับฟังก์ชัน: an "orElseOptional"
พิจารณารูปแบบต่อไปนี้:
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
รูปแบบนี้มีหลายรูปแบบ แต่ต้องการให้ "orElse" เป็นทางเลือกที่ใช้ฟังก์ชันสร้างทางเลือกใหม่ซึ่งเรียกว่าเมื่อไม่มีรูปแบบปัจจุบันเท่านั้น
การใช้งานจะมีลักษณะดังนี้:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
ฉันอยากรู้ว่ามีเหตุผลที่วิธีการดังกล่าวไม่มีอยู่จริงหรือไม่ถ้าฉันแค่ใช้ตัวเลือกเสริมโดยไม่ได้ตั้งใจและวิธีอื่น ๆ ที่ผู้คนคิดขึ้นมาเพื่อจัดการกับกรณีนี้
ฉันควรจะบอกว่าฉันคิดว่าโซลูชันที่เกี่ยวข้องกับคลาส / วิธีการยูทิลิตีที่กำหนดเองนั้นไม่สวยหรูเพราะคนที่ทำงานกับโค้ดของฉันไม่จำเป็นต้องรู้ว่ามีอยู่
นอกจากนี้หากใครทราบวิธีดังกล่าวจะรวมอยู่ใน JDK 9 หรือไม่และฉันจะเสนอวิธีการดังกล่าวได้ที่ไหน ดูเหมือนว่าจะเป็นการละเลย API สำหรับฉัน