Instrução Short IF – ELSE

Estou tentando tornar meu código mais legível, então decidi usar algumas instruções IF curtas.

Aqui está o meu código que não funciona (“não é uma afirmação”):

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false); 

O que há de errado com isso? Precisa de suportes? Onde?

A “expressão ternária” x ? y : z x ? y : z só pode ser usado para atribuição condicional. Isto é, você poderia fazer algo como:

 String mood = inProfit() ? "happy" : "sad"; 

porque a expressão ternária está retornando algo (do tipo String neste exemplo).

Não é para ser usado como um curto, em linha if-else . Em particular, você não pode usá-lo se as partes individuais não retornarem um valor ou retornar valores de tipos incompatíveis. (Então, enquanto você poderia fazer isso se ambos os methods retornassem o mesmo valor, você não deveria invocá-lo apenas para os efeitos colaterais).

Então, a maneira correta de fazer isso seria apenas com um bloco if-else:

 if (jXPanel6.isVisible()) { jXPanel6.setVisible(true); } else { jXPanel6.setVisible(false); } 

que naturalmente pode ser encurtado para

 jXPanel6.setVisible(jXPanel6.isVisible()); 

Ambas as últimas expressões são, para mim, mais legíveis na medida em que comunicam mais claramente o que você está tentando fazer. (E, a propósito, você conseguiu suas condições do jeito errado? Parece que isso é uma falta de operação, ao invés de uma alternância).

Não misture baixa contagem de caracteres com legibilidade . O ponto chave é o que é mais facilmente compreendido; e usar levemente os resources de linguagem é uma maneira definitiva de confundir os leitores, ou pelo menos fazê-los pensar duas vezes.

 jXPanel6.setVisible(jXPanel6.isVisible()); 

ou no seu formulário:

 jXPanel6.setVisible(jXPanel6.isVisible()?true:false); 

O operador ternário só pode ser o lado direito de uma atribuição e não uma declaração própria.

http://www.devdaily.com/java/edu/pj/pj010018/

Como outros indicaram, algo da forma

 x ? y : z 

é uma expressão, não uma declaração (completa). É um rvalue que precisa ser usado em algum lugar – como no lado direito de uma atribuição, ou um parâmetro para uma function etc.

Talvez você possa ver isso: http://download.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

Estou um pouco atrasado para a festa, mas para futuros leitores.

Pelo que eu posso dizer, você está apenas querendo mudar o estado de visibilidade certo? Por que não apenas usar o ! operador?

 jxPanel6.setVisible(!jxPanel6.isVisible); 

Não é uma declaração if, mas eu prefiro esse método para código relacionado ao seu exemplo.