Lontarkan Pengecualian dalam Pilihan di Java 8

1. Pengenalan

Dalam tutorial ini, kita akan menunjukkan bagaimana untuk membuang pengecualian adat apabila Pilihan i s kosong.

Sekiranya anda ingin mengetahui lebih dalam mengenai Pilihan, lihat panduan lengkap kami di sini.

2. Pilihan.atauElseThrow

Sederhananya, jika nilainya ada, maka isPresent () akan kembali benar , dan memanggil get () akan mengembalikan nilai ini. Jika tidak, ia membuang NoSuchElementException .

Terdapat juga kaedah atauElseThrow (Pembekal pengecualianSupplier) yang membolehkan kami memberikan contoh Pengecualian tersuai. Kaedah ini akan mengembalikan nilai hanya jika ada. Jika tidak, ia akan membuat pengecualian yang dibuat oleh pembekal yang disediakan.

3. Dalam Tindakan

Bayangkan bahawa kita mempunyai kaedah yang mengembalikan hasil yang tidak dapat dibatalkan:

public String findNameById(String id) { return id == null ? null : "example-name"; }

Sekarang kita akan memanggil kaedah findNameById (String id) kami dua kali dan membungkus hasilnya dengan Pilihan dengan menggunakan kaedahNullable (nilai T) .

Pilihan menyediakan kaedah kilang statik untuk membuat contoh baru . Kaedah ini dipanggilNullable (nilai T) . Kemudian kita boleh memanggil atauElseThrow.

Kami dapat mengesahkan tingkah laku dengan menjalankan ujian ini:

@Test public void whenIdIsNull_thenExceptionIsThrown() { assertThrows(InvalidArgumentException.class, () -> Optional .ofNullable(personRepository.findNameById(null)) .orElseThrow(InvalidArgumentException::new)); }

Menurut pelaksanaan kami, findNameById akan kembali nol . Jadi InvalidArgumentException baru akan dilemparkan dari kaedah orElseThrow .

Kita boleh memanggil kaedah ini dengan hujah yang tidak kosong. Kemudian, kami tidak akan mendapat InvalidArgumentException:

@Test public void whenIdIsNonNull_thenNoExceptionIsThrown() { assertAll(() -> Optional .ofNullable(personRepository.findNameById("id")) .orElseThrow(RuntimeException::new)); } 

4. Kesimpulan

Dalam artikel ringkas ini, kami membincangkan cara membuang pengecualian dari Java 8 Opsional.

Seperti biasa, kami meletakkan kod sumber di GitHub kami.