Чтобы объявить, что метод выбрасывает исключение обобщенного типа
T
, этот тип T
должен быть объявлен расширяющим Throwable
. Именно в Throwable
в таком случае сотрется T
при компиляции. Также в качестве типа-верхней границы можно использовать любого наследника Throwable
:class MyClass<T extends IOException> {
void foo() throws T {
// ...
}
}