Lendo o JavaDoc de Optional
, eu esbarrei em uma assinatura de método estranha; Eu nunca vi na minha vida:
public T orElseThrow(Supplier exceptionSupplier) throws X extends Throwable
À primeira vista, imaginei como a exceção genérica é possível, já que você não pode fazer isso ( aqui e aqui ). Pensando bem, isso começa a fazer sentido, pois é aqui apenas ligar o
Supplier
… mas o próprio fornecedor sabe exatamente que tipo deve ser, antes dos genéricos.
Mas a segunda linha me bateu:
throws X
é um tipo de exceção genérico completo. E depois:
X extends Throwable
, o que no mundo isso significa?
X
já está vinculado na assinatura do método. throws Throwable
, como o resto será apagado por tipo de apagamento? E uma questão, não diretamente relacionada:
catch(Throwable t)
, ou pelo tipo de Supplier
fornecido; já que não pode ser verificado em tempo de execução?