Доступна ли ссылка на метод для выдачи исключения?
Предположим, у меня есть следующий код:
Runnable exceptionHandler = () -> throw new RuntimeException();
Есть ли способ написать его более кратким, доступным сейчас или, возможно, доступным в будущих выпусках Java? Я ожидаю что-то вроде:
Runnable exceptionHandler = RuntimeException::throw;
Для получения дополнительной информации я намерен использовать этот код для метода, в котором могут возникать исключительные ситуации, но не всегда требуется RuntimeException
выброшены. Я хочу дать звонящим свободу делать все, что им захочется, в момент возникновения исключительной ситуации.
Как мне кажется, в Java 8 это невозможно, обсуждалось ли это и есть ли причина, по которой это невозможно?
1 ответ
Exception::throw
недействителен, и я не могу найти связанных обсуждений в списках рассылки.
Однако, если ваше намерение состоит в том,чтобы "дать абонентам свободу делать то, что они хотят, в момент возникновения исключительной ситуации", вы можете использовать дизайн, аналогичный CompletableFuture
и напишите что-то вроде:
public static void main(String[] args) throws Exception {
CompletableFuture.runAsync(() -> somethingThatMayThrow())
.exceptionally(t -> { t.printStackTrace(); return null; });
}
private static void somethingThatMayThrow() throws RuntimeException {
throw new RuntimeException();
}
Это работает только с непроверенным исключением.