Uma questão interessante que poderá cair nos testes SCJP é em relação
ao uso do for-each, incluído ao mundo Java a partir da versão 1.5. O uso
deste recurso é extremamente simples. O caso interessante é quando
trabalhamos com elementos finais em sua construção.
Bom, para usar o for-each, devemos iniciar o looping com um elemento
(antes dos :) que guardará os elementos da coleção/array (após os :).
Para ficar mais fácil, veja o código:
String values[] = new String[] { "a" , "b" , "c" };
for ( String temp : values ) {
System.out.print( temp );
}
Veja que o vetor values[] contém três Strings. Para cada iteração do
for, os elementos serão guardados em temp. Ou seja, na primeira
iteração, temp é definido com "a", na segunda, com "b", e assim por
diante.
O caso particular seria definir String temp como final. Veja o código:
String values[] = new String[] { "a" , "b" , "c" };
for ( final String temp : values ) {
System.out.print( temp );
}
A primeira impressão é que esse código traría-nos um erro de
compilação - supondo que final marcaria a temp com um valor imutável.
Porém, a ideia é outra: quando definimos o elemento temp como final,
indicamos que ele só poderá ser valorado com os elementos existentes no
vetor values[]. Isso significa que o código abaixo traría um erro de
compilação.
String values[] = new String[] { "a" , "b" , "c" };
for ( final String temp : values ) {
System.out.print( temp );
if ( temp.equals( values[0] ) ) temp = values[1];
}
Ao tentar definir um valor para temp (sendo final) fora do
contexto declarativo do for-each, o programa iria gerar um erro de
compilação indicando que temp só poderá ser atribuído com os valores
existentes em values[]. O erro seria:
Test.java:7: variable temp might already have been assigned
if ( temp.equals( values[0] ) ) temp = values[1];
^
1 error
if ( temp.equals( values[0] ) ) temp = values[1];
^
1 error
Apesar de muito simples, este é um caso que pode gerar dúvida - mais pelo fato da não utilização no dia-a-dia.
Referências:
Espero ter ajudado!
Guilherme Pontes
Nenhum comentário:
Postar um comentário