2014-04-07 9 views
147

które chciałbym użyćJava 8 metoda odniesienia: Podaj Dostawca zdolny do dostarczania parametryczne wynik

java.util.Optional.orElseThrow() 

z rodzaju wyjątek, który prosi o parametrze konstruktora. Coś takiego:

orElseThrow(MyException::new(someArgument)) // obviously NOT working 

Czy istnieje sposób na stworzenie Dostawcy, który przekazuje wartość mojego argumentu?

+19

Dlaczego nie można zrobić 'orElseThrow (() -> nowy MyException (someArgument))'? –

Odpowiedz

289

Pewnie. orElseThrow(() -> new MyException(someArgument)).

17

Wygląda na to, że można rzucić tylko wyjątek RuntimeException z metody orElseThrow. W przeciwnym wypadku zostanie wyświetlony komunikat o błędzie podobny MyException cannot be converted to java.lang.RuntimeException

+1

dziękuję, to było wyrzucenie mnie przy użyciu 'Opcjonalnie' w groovy. Próba "throw Exception" z groovy zamknięcie, ale nie powiodło się z 'java.lang.reflect.UndeclaredThrowableException', zmiana na' RuntimeException' naprawiono. –

+0

Dobrze o tym wiedzieć. Na szczęście w moim przypadku używam RuntimeExceptions, ale nie zawsze tak jest. – hbobenicio

3
optionalUsers.orElseThrow(() -> new UsernameNotFoundException("Username not found")); 
Powiązane problemy