[RESOLVIDO]Operador '|'

7 respostas
ByIvo

Bom dia galera, ao mandar gerar um try{}catch{}, me deparei com a seguinte declaração:

catch (JDOMException | IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

alguém poderia me falar o que é, o que faz e quais são as aplicações desse operador?
é a primeira vez que eu vejo ele.

7 Respostas

S

Desde o Java 7 você pode fazer o mesmo bloco catch pegar 2 Exceptions diferentes.

Se por no seu codigo for lançado um JDOMException ou um IOException ambos irão para o mesmo catch.

Isso evita você ter que copiar e colar o seu código algumas vezes caso você queira que diferentes Exceptions sejam tratadas da mesma maneira.

ByIvo

ByIvo:
Bom dia galera, ao mandar gerar um try{}catch{}, me deparei com a seguinte declaração:

catch (JDOMException | IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

alguém poderia me falar o que é, o que faz e quais são as aplicações desse operador?
é a primeira vez que eu vejo ele.

Achei a resposta galera, é um tipo de declaração do Java 7 para tratar vários tipos de Exception em um bloco só.
Mais informações nesse link:
http://www.oracle.com/technetwork/articles/java/java7exceptions-486908.html

nebster

em outras palavras:

| == “ou”

exemplo:

if (1==1 || 1>0){
}

ByIvo

nebster:
em outras palavras:

| == “ou”

exemplo:

if (1==1 || 1>0){
}

Não não nebster, é apenas um ‘|’ mesmo :slight_smile:

drsmachado

|| = ou inclusivo, ou seja, ou um, ou outro ou ambos.
No caso:

int x = 0;
int y = 10;

if(x >= 0 || y < 100){
/*
Aqui esse bloco iria ser executado pois:
x é igual a 0
y é menor que sem
Ou seja se somente a primeira expressão for verdadeira ou se somente a segunda ou se ambas forem verdadeiras o que tem neste trecho será executado sem falta.
*/
}

| = ou exclusivo, ou um ou outro. Nunca ambos.
É o caso das exceptions, você só tem uma exception por vez. Ah, mas se for uma FileNotFoundException e uma IOException? Ele só irá capturar a IOException, visto que FileNotFoundException é uma exceção que estende IOException.

try{
//faz coisas aqui
}catch(IOException | ClassNotFoundException e){
System.out.println("Erro: " + e.getMessage());
}
E

Uma coisa boa do operador “|” na cláusula catch é que reduz a quantidade de código repetitivo.
Isso costuma ocorrer quando você vai tratar o método “verify” da classe java.security.cert.Certificate ( http://docs.oracle.com/javase/6/docs/api/java/security/cert/Certificate.html#verify(java.security.PublicKey) ) , por exemplo.

pmlm

Errado. O ou exclusivo é ^.

Criado 26 de novembro de 2012
Ultima resposta 26 de nov. de 2012
Respostas 7
Participantes 6