กล่อง Optional เปิดมีติ๊กเขียว และกล่องว่างมีเครื่องหมายตกใจสีอำพัน

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