Java Optional.orElseThrow: บังคับมีค่าที่ขอบเขตแทนคืน null
น้องกายEngineering
พอหา entity จาก id แล้ว “ต้องเจอ” การคืน null ไปต่อแค่เลื่อน NPE ครับ
Optional.orElseThrow() คืนค่าถ้ามี ไม่งั้นโยน NoSuchElementException มี overload รับ Supplier เพื่อโยน exception โดเมนของคุณเอง
import java.util.Optional;
public class Main {
static String requireName(Optional<String> name) {
return name.orElseThrow(() -> new IllegalArgumentException("name required"));
}
public static void main(String[] args) {
assert requireName(Optional.of("กาย")).equals("กาย");
try {
requireName(Optional.empty());
assert false : "expected throw";
} catch (IllegalArgumentException ex) {
assert ex.getMessage().equals("name required");
}
System.out.println("orElseThrow tests passed");
}
}
ใช้ orElse / orElseGet เมื่อมีค่าสำรองจริง ๆ ใช้ orElseThrow เมื่อการขาดค่าคือบั๊กหรือคำขอผิด
Recap
- อ่าน Optional.orElseThrow
- map 404/validation เป็น exception โดเมน
- อย่า
get()เปล่า ๆ - สำรองได้ →
orElseGetดีกว่าคำนวณแพงในorElse