lança x estende a assinatura do método de exceção

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.
  • Será que isso por qualquer meio, resolver a restrição de exceção genérica?
  • Por que não apenas throws Throwable , como o resto será apagado por tipo de apagamento?

E uma questão, não diretamente relacionada:

  • Será exigido que este método seja pego como catch(Throwable t) , ou pelo tipo de Supplier fornecido; já que não pode ser verificado em tempo de execução?