Чтение JavaDoc Optional
, я столкнулся с необычной сигнатурой метода; Я никогда не видел в своей жизни:
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
throws X extends Throwable
На первый взгляд, я задавался вопросом, возможно ли вообще исключение <X extends Throwable>
, так как вы не можете этого сделать (здесь, а здесь). С другой стороны, это начинает иметь смысл, так как здесь просто привязать Supplier
... но сам поставщик точно знает, какой тип он должен быть, до дженериков.
Но вторая строка поразила меня:
-
throws X
- это полный общий тип исключения.
И затем:
-
X extends Throwable
, что в мире это значит?-
X
уже привязан к сигнатуре метода.
-
- Будет ли это каким-либо образом решить универсальное ограничение исключения?
- Почему не просто
throws Throwable
, так как остальные будут удалены стиранием типа?
И один вопрос, не имеющий прямого отношения:
- Должен ли этот метод быть пойман как
catch(Throwable t)
или предоставленным типомSupplier
; поскольку он не может быть проверен во время выполнения?