Cara eu mudei teu código onde tinha somente 0 e 1 eu coloquei new Integer(0) e new Integer(1) e rodou legal.
Eu tive que mudar porque estava aparecendo um erro de compilador com a mensagem: Incompatible conditional operand types int and null. Acho que ele não tava fazendo o cast pra Integer com o 0 e o 1.
Com a mudança o código ficou assim:
String xx = "seila";
String a1 = ("lala".equals(xx)) ? "0" : ("bebe".equals(xx)) ? "1" : null;
Integer a2 = ("lala".equals(xx)) ? new Integer(0) : ("bebe".equals(xx)) ? new Integer(1) : null;
V
victorpintoPJ
eusourafael, você deve estar usando JDK 1.4 enquanto luBS deve ser o 1.5.
Porque o tipo de retorno deve ser o mesmo nesse “if”. No seu caso teve que colocar dois objetos, enquando no do luBs provavelmente aconteceu o tal do empacotando automático, que é transformar o inteiro em classe.
Quanto ao null exception eu não olhei ainda.
Edit: A exception deve ser lançada na hora que você USA o objeto do tipo Integer, e não na atribuição.
L
luBSPJ
Sim, estou usando java 1.5, esqueci de mencionar.
E não, o erro ocorre realmente na linha da atribuição mesmo =/ mesmo que eu não use o objeto a2 (atribuido) ele da erro. Eu imagino que ele tente criar um Integer passando null, mas se esse for o caso, porque não ocorre erro tb com a String?! e porque num ternario atribuindo Integer simples tb não ocorre?! ai que fiquei bolado… seila não consegui entender por que…
não que eu precise resolver esse problema, existe 1001 outras maneiras de fazer isso, eu só fiquei curioso de saber por que da erro. Se eu visse um treco desse tipo eu nunca diria que daria erro, ainda mais um nullPointer…
E
eusourafaelPJ
Certo, eu estou usando o 1.4 aí tinha visto pelo código que ele tava utilizando o 5 aí falei “Acho que ele não tava fazendo o cast pra Integer com o 0 e o 1.”, o tal do empacotamento automático.
luBS, você testou colocando o new Integer(0) e new Integer(1)??? Aqui não gerou exceção com esse novo código.
L
luBSPJ
Sim, se eu colocar new Integer(1) etc funciona.
Alias, se eu fizer isso apenas
da erro, olhando isso devo imaginar que o erro está no empacotamento, agora queria saber porque, minha intenção não é fazer funcionar a atribuição e sim entender porque da erro . :???:
E
eusourafaelPJ
Ah beleza então. Agora o motivo também não entendi hehehe…Se descobrir o motivo posta aí pra gente. Valeu.
S
SchuenemannPJ
O que eu imagino é que ele tente fazer autoboxing, usando new Integer(null), o que gera o erro.
Essas formas “abreviadas” às vezes fazem coisas implícitas. Exemplo: