Método ignorando exception

21 respostas
W

Alguém já passou pelo problema semelhante ?

public void testeFull(List<Campo> campos) throws Exception {
        try {
            for (Campo campo : campos) {
                if (!lstcampos.contains(campo.getNome())) {
                    throw new Exception("Verifique o campo: " + campo.getNome()); // entra, e continua no laço normalmente
                }
            }

        } catch (Exception e) {
            throw new Exception(e.getMessage());
        }

    }

21 Respostas

A

da um break; depois da exception

W

Quando faço isso, o compilador reclama:

unreachable statement
P

Claro, nunca chegaria nesse break.

Como tens a certeza que o entra no if e continua o for?

W

debugando

D

galera…

quando um metodo da um throw, ele para a execução do método e volta pra quem o chamou…

nunca ele vai dar o throw e depois continuar o for…

pensa em otura logica ai

W

Desculpe, mais é o que está acontecendo

W

Fiz até um videozinho :smiley:

D

Faz isso aqui pra mim:

public void metodoQualquer(){
    throw new Exception("Erro aqui");
    System.out.println("Mensagem no console");
}

faz com que um método chame isso aí e me diz se o print vai aparecer no console

W

Você concorda comigo que deveria acontecer o mesmo que aconteceu no seu método, com o método postado anteriormente?

W

Vou complicar um pouco mais.
Me diga, porque não entrou no if, se o resultado é true.

D

Cara, se ele ta caindo no else, é pq ele ta caindo no else!
Em alguma iteracao aí ele cai no else…

outra coisa… o contains esta funcionando do jeitinho que você queria?
Debuga só o método contains

W

o contains está, como você pode ver, o retorno dele é true

W

vou postar os tipos que uso nesse bloco:

ResultSet rs = st.executeQuery("SHOW COLUMNS FROM " + tabela.getNome()); //pega o nome das colunas
            List<String> lstcampos = new LinkedList<String>(); // cria o List de String
            String value;
            while (rs.next()) {
                lstcampos.add(rs.getString(1).toLowerCase());//adiciona, o nome da coluna no List
            }

            for (Campo campo : campos) {//Aqui vem o teste, pra verificar se os campos informados pelo usuário, existem no banco.
                value = campo.getNome().toLowerCase();
                if (!lstcampos.contains(value)) {// percorrendo o for, eu verifico nesse caso, se o nome "id", contém no meu List de String. nesse caso, ao debugar o resultado é true.
                    throw new Exception("Verifique o campo: " + value);//mesmo negando, ele entra nessa linha, executa o throw e continua executando este for.
                }
            }
D

me fala o q vc quer fazer.
Com calma.
kkkkkkk

De todo jeito, acho que o q vc esta pensando nao vai funcionar legal.
Me conta ae.

D

Vamos fazer um teste???

coloca o retorno aí do método um boolean…

e da um return false aí :slight_smile:

e testa os resultados no JUnit mockando os resultados. (JMockito)

Ou então, faz manual mesmo, nao sei…

abraços

P

Aposto que o que está a ser executado não está sincronizado com o código que tens. Faz um clean ou rebuild ou algo assim…

W

não fui muito com o contains e resolvi usar o indexof ai invés, e executei o cleanUp.

Aqui, o retorno do indexof é true e ele entra, executa o exception e sai do for. perfeito

eu apenas neguei com o exclamação, e ele continua entrando e continua executando o for após

W

Nada faz sentido mais, rs…
nesse caso aqui, ele entra no if e no else(aqui ainda passa pelo throws e continua executando normalmente)

W

Ao invés de usar o for each, eu fiz o seguinte:

for (int i=0; i < campos.size(); i++) { campoLocal = campos.get(i);
e deu certo.
só que agora fico na duvida, pq nao parava quando usava o for each. =\

D

wilsontads:
Ao invés de usar o for each, eu fiz o seguinte:

for (int i=0; i < campos.size(); i++) { campoLocal = campos.get(i);
e deu certo.
só que agora fico na duvida, pq nao parava quando usava o for each. =

Eu diria que era o contains ou o proproio index of

W

Depois que funcionou com o indexOf, eu implementei o contains novamente. ele entra no thrwos, para o loop e lança a excessão.
antes com o for each ele continuava no loop =\

Criado 11 de setembro de 2012
Ultima resposta 11 de set. de 2012
Respostas 21
Participantes 4