Throw Exception in Opcionális a Java 8-ban

1. Bemutatkozás

Ebben az oktatóanyagban bemutatjuk, hogyan dobhatunk egyedi kivételt, amikor egy Választható éns üres.

Ha mélyebbre akarsz menni Választható, vessen egy pillantást teljes útmutatónkra, itt.

2. Opcionális.vagyElseThrow

Egyszerűen fogalmazva, ha az érték jelen van, akkor jelen van() visszatérne igazés hívás kap() visszaadja ezt az értéket. Ellenkező esetben dob NoSuchElementException.

Van egy módszer is orElseThrow (Szállító kivételSzolgáltató) amely lehetővé teszi számunkra, hogy egyedi Exception példányt biztosítsunk. Ez a módszer csak akkor adja vissza az értéket, ha jelen van. Ellenkező esetben a szolgáltató által létrehozott kivételt dobja.

3. Műveletben

Képzeld el van egy módszerünk, amely semmissé nyilvánítható eredményt ad vissza:

public String findNameById (String id) {return id == null? null: "példa-név"; }

Most felhívni fogjuk findNameById (karakterlánc azonosító) metódust kétszer, és tekerje be az eredményt egy Választható a ofNullable (T érték) módszer.

Választható statikus gyári módszert biztosít új példányok létrehozására. Ezt a módszert ún ofNullable (T érték). Akkor hívhatunk vagyElseThrow.

A viselkedést a teszt futtatásával ellenőrizhetjük:

@Test public void whenIdIsNull_thenExceptionIsThrown () {assertThrows (InvalidArgumentException.class, () -> Opcionális .ofNullable (personRepository.findNameById (null)) .orElseThrow (InvalidArgumentException); }

Megvalósításunk szerint findNameById vissza fog térni nulla. Tehát az új InvalidArgumentException kidobják a vagyElseThrow módszer.

Hívhatjuk ezt a módszert nem null argumentummal. Akkor nem kapunk InvalidArgumentException:

@Test public void whenIdIsNonNull_thenNoExceptionIsThrown () {assertAll (() -> Opcionális .ofNullable (personRepository.findNameById ("id")). VagyElseThrow (RuntimeException :: new)); } 

4. Következtetés

Ebben a rövid cikkben megvitattuk, hogyan lehet kivételt tenni a Java 8-ból Választható.

Mint mindig, a forráskódot is feltesszük a GitHub-ra.


$config[zx-auto] not found$config[zx-overlay] not found