Operador ? <<syntax improvements ?>>>

Oi pessoal

estava perdido no site do javaworld e vi este trecho “estranho” de código. Resolvi testar pra ver se funciona mesmo. Não parece que funciona pois pra mim deu erro.

Não postei meu código completo porque ficou muito tosco (poxa já é 00:00 e não tem como exigir muito) mas se quiserem eu posto aki. Então segue o trecho dos metodos e comentários do site.

[quote]
Take the latest version of Java, which tries to make null-pointer checking easier by offering shorthand syntax for the endless pointer testing. Just adding a question mark to each method invocation automatically includes a test for null pointers, replacing a rat’s nest of if-then statements, such as:
fonte : http://www.javaworld.com/javaworld/jw-12-2010/101206-programming-mistakes.html[/quote]

codigo normal

public String getPostcode(Person person) { String ans= null; if (person != null) { //testa se person é null Name nm= person.getName(); // se não for atribui o retorno do objeto person.getName ao novo objeto nm criado dentro do método if (nm!= null) { //totalmente redundante já que acabei criar nm mas enfim. testa se nm é null ans= nm.getPostcode(); //se não for a string ans recebe o retorno de getPostcode da classe Name } } return ans }

e código melhorado (segundo o site)

public String getFirstName(Person person) {
      return person?.getName()?.getGivenName();
      //aqui teoricamente ele já testa se person é null, se getName retorna um objeto Name null e se tudo der certo este getGivenName deve retornar uma string

Alguém já viu estes sinais de interrogação usados para testar se a referência a objetos é null?
Detalhe: não considerem o nome dos métodos pois no site mesmo eles mudaram. A dúvida é se este tipo de utilização do operador “?” funciona ou não para este tipo de teste. se é que isto é Java :?:.

Esse código acredito eu que é inticiador ternário.
String aux=null;
String cod=aux==null?“outrovalor”:aux

nesse aco ele verifica a condição se for verdadeira ele pega o primeiro valor se não ele pega o segundo.

Cara eu estou aqui com a jdk 6, e imagino que levei o mesmo erro que você:

[color=red]
Exception in thread “main” java.lang.Error: Unresolved compilation problems:
Syntax error on token “.”, delete this token
Syntax error on token “.”, delete this token
Syntax error, insert “: Expression” to complete Expression
Syntax error, insert “: Expression” to complete Expression

at Teste.getFirstName( Teste.java:22 )
at Teste.main( Teste.java:28 )

[/color]

Creio que o autor do texto confundiu com outra linguagem.

Imagino que esteja falando do java 7.

O iniciador ternário ele já está presente na jdk atual

String aux=null; 
String cod=aux==null?"outrovalor":aux;

Esse modo realmente não conheço e pelo o pouco que eu li sobre o java 7, desconheço essa informação.

O operador “?.” foi proposto mas não entrou no Java 7.

Olá

dssimao,

foi exatamente este erro que tive.

entanglement, infelizmente pois seria uma melhoria muito grande na sintaxe. Talvez não para ser usada em qualquer implementação, mas como comentado no texto do javaworld, aqueles ifs aninhados são muito chatos

Algumas novidades do jdk 7 serão transferidas para versão 8.
O motivo de tirar alguns recursos foi para entregar esse novo jdk em meados do ano que vem enquanto o jdk 8 será entregue em meados de 2012.
Pode ser que esse seja um dos recursos que virão somente na versão 8.

Pelo que lembro da discussão sobre o “?.” (operador “elvis”), nem para o Java 8 ele está sendo cogitado. Acho que isso vai é ficar para sei lá quando.

Eu também acredito que isso deve demorar.
Quando sair o java 7 já vai ser um grande progresso.