Prepare-se para o Tigre - A nova versão de Java

Márcio d'Ávila, 12 de julho de 2004. Revisão 3, 29 de agosto de 2005.
Categoria: Programação: Java

A nova versão da linguagem Java e suas APIs básicas estão muito próximas de serem oficialmente lançadas, no quinto release do SDK padrão de Java, o J2SE 5 (anteriormente 1.5), codinome "Tiger" (Tigre). O J2SE 5.0 Beta 2 está disponível desde junho de 2004.

Esta será provavelmente a mais rica e importante atualização da linguagem Java desde o J2SE 1.2, que coincidiu com a segunda geração da plataforma Java (o "Java 2" que foi dividido em J2SE, J2EE e J2ME). Um indicativo da importância da nova versão agora é que a Sun passou a denominá-la J2SE 5.0, ao invés de 1.5 se seguisse o formato de numeração usado até a versão 1.4. O J2SE release 5 inclui 15 Java Specification Requests (JSRs) componentes, gerenciados pelo Java Community Process (JCP), mecanismo oficial de participação e debate da comunidade na evolução da Plataforma Java.

Vários recursos foram criados para facilitar a programação Java e trazer maior poder de expressão, de forma a tornar a escrita de código Java ao mesmo tempo mais flexível e mais simples. Isso não só traz um código conciso e preciso como também reduz a chance de erros introduzidos em tarefas repetitivas e maçantes.

Generics (Genéricos)
Permite especificar uma classe ou hierarquia que limita o tipo dos objetos que podem estar contidos em uma coleção. A verificação de tipo é feita em tempo de compilação e dispensa o uso de cast na atribuição e obtenção de elementos, garantindo maior precisão e simplicidade. O recurso é similar (mas não igual) aos Templates de C++.
Autoboxing (Envólucro automático de tipos primitivos como objetos)
"Boxing" é o envólucro de um tipo primitivo como objeto. Autoboxing é portanto a conversão automática entre um tipo primitivo e um objeto da sua classe-casca (wrapper) correspondente — como o tipo int e a classe Integer — quando necessário. Facilita o uso de tipos primitivos em situações onde são esperados objetos (tipicamente em elementos de coleção) e vice-versa.
Comando for para iterações
O comando for foi melhorado para suportar a seguinte sintaxe simplificada para iteração de elementos de um array ou coleção: for (ClasseElemento elem : lista). Esta nova sintaxe costuma ser denominada for-melhorado (enhanced-for) ou para-cada (for-each).

Um exemplo do tipo antes-e-depois esclare facilmente a forma e as vantagens do uso destes recursos:

Antes:
List lista = new ArrayList();  // não restringe tipo dos elementos
lista.add(new Integer(25));  // boxing: converter int 25 em objeto Integer
lista.add(new Integer(33));  // boxing: converter 33 em Integer
int total = 0;
for (Iterator it = lista.iterator(); it.hasNext();) {  // criar e percorrer iterador
	Integer elem = (Integer)it.next();  // iteração next() e cast explícito (Integer)
	total += elem.intValue();  // unboxing: intValue()
}
Depois:
List<Integer> lista = new ArrayList<Integer>();  // generics: define tipo do elemento Integer
lista.add(25);  // autoboxing
lista.add(33);  // autoboxing
int total = 0;
for (Integer elem : lista) {  // for() melhorado: iteração implícita, dispensa cast
	total += elem;  // autoboxing: unboxing implícito
}

Outros novos recursos da linguagem deixarão mais confortáveis e aliviados os programadores que migraram de C/C++ para Java:

Varargs (Número variável de argumentos)
Similar ao existente em C/C++, Java passa a suportar na definição de parâmetros de um método a sintaxe ... para denotar uma lista de parâmetros de tamanho variável, sem a necessidade de se usar explicitamente uma coleção para agrupá-los.
Entrada e Saída Formatada
Com a introdução de varargs, os recursos de entrada e saída formatadas, existentes em C com as funções scanf e printf (ausências sempre reclamadas pelos programadores advindos de C/C++), puderam ser implementados em Java pelas classes Scanner e Formatter do pacote java.util, incluindo — claro — o método printf(), com melhorias em relação ao C como suporte ao tipo Date e a mudança de linha multi-plataforma %n.

Além da facilidade de desenvolvimento, existem também novidades e melhorias visando escalabilidade e desempenho, monitoramento e gerenciabilidade. O desenvolvimento de interface gráfica desktop também foi agraciado com os temas de aparência e comportamento gráfico (look-and-feel) GTK/Linux e Windows XP. Foram introduzidas também outras evoluções diversas, como o suporte aos padrões XML mais atuais e a introdução dos poderosos RowSets em JDBC. As referências deste texto apresentam links recomendados para o aprofundamento nos detalhes e novidades da nova versão J2SE 5 "Tiger".

Referências

Referências sobre Generics


Creative Commons License

© 2003-2011, Márcio d'Ávila, mhavila.com.br, direitos reservados. O texto e código-fonte apresentados podem ser referenciados, distribuídos e utilizados, desde que expressamente citada esta fonte e o crédito do(s) autor(es). A informação aqui apresentada, apesar de todo o esforço para garantir sua precisão e correção, é oferecida "como está", sem quaisquer garantias explícitas ou implícitas decorrentes de sua utilização ou suas conseqüências diretas e indiretas.