Locura com if in-line.  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Primeiro a situação que funciona:



Segundo a situação que não funciona:



A segunda, ocorre NullPointerException. Alguem sabe me informar o motivo ?

This message was edited 1 time. Last update was at 31/03/2009 14:53:44

[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

Realmente intrigante, mas acho que deve ter algo a ver com o AutoBoxing.

Note que assim não dá erro:

This message was edited 1 time. Last update was at 31/03/2009 15:25:20


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

Só um comentário... isso não é um "if com inline", mas o operador ternário.

Esse operador espera o mesmo tipo de dado de ambos os lados do :

Talvez esteja aí a solução do problema.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Já tinha encontrado essa situação:



Porém estou utilizando o java 6 e não deveria necessitar o uso de Boolean.FALSE e Boolean.TRUE.

Seria isso bug do Java ?

Obs: Operador ternario é uma forma compacta de expressar o if e else, ou seja, o mesmo que if in-line.. ou não ?

This message was edited 1 time. Last update was at 31/03/2009 15:34:32

[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

É que a palavra inline não é sinônimo para "curto". De qualquer forma, esse operador não é exatamente igual a um if, pq ele exige o retorno de um valor. Você não pode simplesmente fazer:



Que dá erro.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Claro.
Mas então, o que seria um if inline para você ?
[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

Inline é um código que depois de compilado irá desaparecer. Para mim, um if inline seria analisado em tempo de compilação e só o resultado seria colocado no binário final.

Mas enfim, acho que estamos fugindo do ponto aqui. Ainda estou curioso para saber de onde vem esse NullPointerException. O que acontece é que com Boolean.TRUE e Boolean.FALSE o Java não fará auto-boxing, e por isso, o erro não ocorre.

Ainda assim, eu esperaria que o compilador fosse mais esperto que isso, ou será que meu chute está errado?

This message was edited 1 time. Last update was at 31/03/2009 16:05:13


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Poisé,
também achava que o compilador seria esperto o suficiente para identificar essa situação.
[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Hum...

O programa é equivalente a este aqui:


Quando na verdade você acharia que ele seria equivalente a este aqui:


Pensem mais um pouco. Dá a impressão que é algum lado obscuro das regras de "autoboxing" que interferem com a resolução de tipos no "?". Pode até ser algum bug esquisito do compilador.
[WWW]
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Achei muito bom isso!

Fiz um teste com String:



Perfeito!
[MSN]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Matheus Leandro Ferreira wrote:Achei muito bom isso!

Fiz um teste com String:



Perfeito!


POG!



O problema é que não é possivel atribuir o valor null a tipos primitivos.

Eu não testei mas isso funciona com int, double, etc?

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Mark_Ameba wrote:
Matheus Leandro Ferreira wrote:Achei muito bom isso!

Fiz um teste com String:



Perfeito!


POG!



O problema é que não é possivel atribuir o valor null a tipos primitivos.

Eu não testei mas isso funciona com int, double, etc?


Exato, mas o boolean que utilizei não era primitivo e sim Objeto. (podendo receber valor null)

só com o tipo Boolean da problema! mas o lance é separar as situações mesmo.. bug loco no compilador.
[MSN]
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Outro problema que encontrei foi esse.. Comparando wrappers:



Obs: Quando você usa == para comparar, ele acaba comparando a referencia do objeto e utilizando o método equals() ele compara o valor.
Obs2: Fui atras disso... isso seria um foro na implementação do Flyweight Pattern ???

This message was edited 1 time. Last update was at 01/04/2009 10:19:22

[MSN]
mario.fts
GUJ Ranger
[Avatar]

Membro desde: 14/05/2008 09:41:06
Mensagens: 815
Localização: São Paulo - ZL
Offline

eu li algo a respeito disso, acho que tem a ver com o fato de 129 não caber em um byte... (caia até na certificação acho) vou dar uma procurada e depois posto aqui

This message was edited 1 time. Last update was at 01/04/2009 12:23:07


Mário Amaral Gonçalves

"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra
[Email]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Lembro de ver isso em tópicos bem antigos do GUJ. Mas lembro que após 128 o Integer já aloca um novo espaço. Não lembro direito. Tem que procurar mesmo.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team