Использование дженериков здесь опасно. Java разрешает обобщенные c типы во время компиляции. В вашем коде вам потребуется разрешение во время выполнения. Вы можете сделать это, передав класс в качестве параметра вашей функции.
private static <Ex extends Exception> Ex getCauseOf(final Class<Ex> typeResolve, final Throwable e) {
Throwable cause = e;
while (cause != null) {
if (typeResolve.isInstance(cause)) return (Ex) cause; // or typeResolve.cast(cause);
else cause = cause.getCause();
}
return null;
}
Таким образом, вы можете изменить вызов следующим образом:
CertPathValidatorException cpve = Main.getCauseOf(CertPathValidatorException.class, e3);