Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida no Ex. 4 da Aula 6 - Lidando com excessões

Olá, pessoal

Nesse exercício o professor propõe essa solução para que a classe faça um throw na exceção do método invocado.

public static void chamarTestes(Object obj) throws Exception{

    Class<?> clazz = obj.getClass();

    for(Method m : clazz.getMethods()){
        if(m.getName().startsWith("test") && 
                m.getReturnType() == void.class &&
                m.getParameterTypes().length == 0){
            try{
                m.invoke(obj);
            }catch(InvocationTargetException ex){
                throw ex.getTargetException();
            }  
        }
    }
}

Porém esse código não pode nem ser compilado uma vez que o método getTargetException retorna um Throwable e não um Exception, desse modo acredito que o certo seria:

public static void chamarTestes(Object obj) throws Throwable{

    Class<?> clazz = obj.getClass();

    for(Method m : clazz.getMethods()){
        if(m.getName().startsWith("test") && 
                m.getReturnType() == void.class &&
                m.getParameterTypes().length == 0){
            try{
                m.invoke(obj);
            }catch(InvocationTargetException ex){
                throw ex.getTargetException();
            }  
        }
    }
}

Um abraço!

1 resposta
solução!

Você está correto! O método deveria jogar um Throwable e não uma Exception.