Atenção: esse artigo tem uma palestra complementar. Clique e assista!

De que se trata o artigo:

Começamos aqui a cobertura da plataforma Java SE 7, cujo release final será lançado ainda este ano (deve estar em fase Release Candidate quando o leitor receber esta Edição).

Neste primeiro artigo, focamos na linguagem Java 7: novos recursos sintáticos como multi-catch, lambdas, ARM, etc.


Para que serve:

De todas as ferramentas do desenvolvedor Java, a própria linguagem Java é sem dúvida a mais crítica e mais fundamental – o motor do carro. Até por isso, não é toda hora que se mexe na linguagem: a última vez foi no J2SE 5.0, já se vão seis anos. Chegou a hora de mexer no motor novamente, atualizando-o para ter menor consumo e maior rendimento.

Até mesmo para a turma do “em time que está ganhando não se mexe”, ou que simplesmente gosta da linguagem Java do jeito que está, é importante atualizar-se, pois novos recursos de linguagem são rapidamente explorados por novas APIs. Basta ver, por exemplo, o intenso uso de sintaxes do Java 5 – tipos genéricos, enums, anotações – em APIs modernas como EJB 3 e muitas outras. Da mesma forma, dentro de algum tempo começaremos a receber os próximos lotes de APIs novas e atualizadas, que farão uso das novas sintaxes do Java 7.


Em que situação o tema é útil:

Este artigo oferece uma visão abrangente e didática das novidades da linguagem Java 7. Ao mesmo tempo, procuramos aprofundar muitos aspectos interessantes, das sintaxes mais triviais até aquelas mais complexas e polêmicas.

Chegou novamente a hora de recepcionar uma “nova versão do Java”. O fato de podermos usar esta expressão sem qualificá-la – no caso, é apenas a plataforma Java SE que está sendo atualizada – mostra o papel fundamental desta plataforma, o eixo central de todo o ecossistema Java. Todo o resto – Java EE, Java ME, JavaFX, até mesmo alternativas como o Android – é secundário, derivado: igual a alguma versão do Java SE, mais isso, menos aquilo.

O último artigo desse tipo que escrevi já é bastante antigo: “Prepare-se para o Mustang” saiu na Edição 33, em meados de 2006... longos quatro anos. O leitor não deveria ter esperado tanto por este novo artigo, pois lá naquela edição, no quadro “Versionamento e evolução do Java SE”, apontávamos para 2008 como estimativa para o Java SE 7. Citando o quadro:

Outra característica do novo modelo é que as atualizações principais (versão maior) são mais freqüentes, que tiveram um ciclo estimado em 18-24 meses na época do lançamento do Tiger. Foi uma boa estimativa: o release final do Mustang ocorrerá 21 meses após o do Tiger, bem melhor que os 31 meses entre o Merlin J2SE 1.4.0 e o J2SE 5.0. Note que somente as versões “oficiais” precisam ser acompanhadas por outros implementadores (como BEA, IBM e grupos open source); as versões micro e de manutenção são específicas à implementação da Sun.

Quanta coisa mudou de lá para cá! Primeiro, a palavra “freqüentes” perdeu o trema. J Segundo, não há mais nenhuma “implementação da Sun”: o próximo JDK será o Oracle JDK 7. Terceiro, o Java SE 7 não foi lançado em “18-24 meses” após o Java SE 6. Se este vier por volta do final de 2010, como atualmente esperado, terão sido quatro anos de espera. Vamos conhecer aqui esta jornada, apresentar as novidades do Java SE 7 (APIs e linguagem Java), e ver se valeu a espera.

Fazendo justiça, a demora na entrega do Java SE 7 não foi tanto um atraso, mas um desvio de rota. Não é que o plano não tenha sido bem executado, mas sim, foi sendo aos poucos substituído por outros planos. Isso aconteceu por que, logo após o lançamento do Java SE 6, a Sun se deu conta – ou pelo menos, começou a tomar alguma atitude – de três problemas:

1. A defasagem do Java no desktop & web – as Applets estavam “mortas”, frente à competição de plataformas como HTML/JavaScript, Flex ou Silverlight;

2. A defasagem do Java nas plataformas móveis – o Java ME ainda dominava, mas no segmento high-end já era ameaçado pelo WinMob, Linux, Palm, e pelos anúncios de um tal iPhone;

3. A crescente popularidade das linguagens dinâmicas (dinamicamente tipadas).

A Sun agiu então para enfrentar todos estes desafios, o que aconteceu em várias frentes:

1. O Projeto Update N, com muitas melhorias para o Java-no-cliente. Os primeiros frutos vieram em outubro de 2008 (6u10), mas é um esforço contínuo (mais melhorias no 6u14, 6u18, 6u21);

2. O anúncio, na JavaOne 2007, de uma nova plataforma móvel chamada JavaFX, que viria renovar e revolucionar o Java ME. O primeiro release veio em dezembro de 2008;

3. A JSR-292 (invokedynamic) e o projeto MLVM, que trarão para o Java SE 7 (e além) aperfeiçoamentos da JVM para acomodar uma variedade maior de linguagens de programação.

Note que a JavaFX, concebida como uma plataforma móvel, logo mudou de rumo. A Sun desistiu de criar uma plataforma completa (com kernel, stack GSM, desktop etc.). Sábia decisão, pois isso exigiria muito investimento (competindo com Microsoft e Google), e talento no design voltado ao usuário final (competindo com a Apple). A Sun não tinha nenhum destes requisitos...

Por outro lado, a JavaFX foi expandida para todos os segmentos: móvel, desktop e TV; e virou parte da solução também para o problema 1 (desktop), reconhecendo que parte deste problema era culpa das APIs legadas de GUI do Java SE (AWT, Java2D, Swing, JMF...), e as melhorias possíveis no Update N não bastariam para tornar o Java competitivo na nova geração RIA.

Acrescente a essa confusão outros fatores, como a evolução do OpenJDK (que nasceu por volta do lançamento do Java SE 6); A deterioração financeira da Sun, que resultaria num penoso processo de aquisição, das primeiras conversas com a IBM até a decisão da Oracle e o grande atraso causado pela Comunidade Europeia; Finalmente, o difícil período de transição dos projetos da Sun já dentro da Oracle. Somando tudo, devemos ficar satisfeitos com o release do Java SE 7 ainda em 2010.

O plano atual

No momento em que escrevo, o JDK 7 Milestone 8 (b96) foi disponibilizado há pouco (testei a maioria das listagens deste artigo com o b99). A Oracle mantém o seguinte planejamento, em openjdk.java.net/projects/jdk7/milestones:

· O JDK M8 seria o release feature-complete;

· M9 (b103): 22 de julho;

· M10 (b110): 9 de setembro: Milestone final = Release Candidate 0;

· Mais alguns RCs, conforme necessário até o FCS.

Repare no “M8 seria”: a rigor o plano atrasou um pouco, pois o b96 ainda não inclui dois itens importantes – lambdas e Jigsaw. Mas ambos já têm implementação em estágio avançado, em repositórios paralelos; é um atraso pequeno. Se dermos uns três meses para a estabilização final (Release Candidates), isso projeta o release final ainda no quarto trimestre. Nesse mesmo prazo, a Oracle irá entregar atualizações do NetBeans e Glassfish com suporte completo ao Java SE 7.

Quando o leitor receber esta Edição, o M10/RC0 já terá sido lançado, ou estará bem próximo. Também já deve haver (ou estar próxima) uma atualização do NetBeans com suporte completo à linguagem Java 7. Estarão faltando apenas bugfixes para o release final do “novo Java”. Enfim, será hora de botar as mãos na massa: explorar as novidades, experimentar, aprender.

O NetBeans 6.9 já suporta algumas sintaxes do Java 7, e outras são disponíveis em builds experimentais no momento em que escrevo. Já o suporte do Eclipse deve demorar mais, sendo finalizado apenas no release 3.7 em junho de 2011, pois exige alterar não só elementos do IDE (como editor de código e autoformatador) mas também o compilador ECJ.

Focamos aqui “apenas” nas novidades da linguagem Java. Como parâmetro de comparação, lembro que para cobrir o J2SE 5.0 (Tiger), precisei de nada menos que sete Edições da Java Magazine: 12 (Linguagem / Geral), 13 (APIs e outras melhorias), 16 (Tipos Genéricos), 17 (Annotations), 20 (java.util.concurrent), 27 (Migração / Geral), e 28 (Migração / Tipos Genéricos). Destes, foram quatro artigos inteiros só para novidades da linguagem. Embora o Java 7 não seja tão radical – não há nenhuma novidade de linguagem de dimensão sequer próxima dos tipos genéricos, nem mesmo lambdas – precisaremos certamente de uma pequena série para esgotar este release.

A Linguagem Java 7

Plano ou acaso, continuamos com o modelo instituído a partir do J2SE 5.0 de ter uma renovação da linguagem Java em releases ímpares, pois o Java SE 6 teve apenas novidades de APIs ou de implementação. Para quem (como eu) aprecia linguagens de programação e acompanha o estado-da-arte nesta área, o ritmo de progresso do Java é enervante: lá se vão seis anos desde o Tiger. Por outro lado, o status dominante e consolidado do Java, especialmente em ambiente corporativo, impõe um conservadorismo inevitável, e uma preocupação obsessiva com compatibilidade. Em pleno 2010, ainda tenho um grande projeto “Enterprise” que só agora estou conseguindo atualizar para usar recursos do Java 5, pois finalmente o cliente está migrando o application server.

É neste contexto, então, que temos outra versão da linguagem. O Java 7 não foge muito do já visto na época do Java 5, ou seja: várias pequenas novidades, poucas grandes, e nenhuma alteração radical que comprometa compatibilidade – por bem ou por mal.

Project Coin

As novidades da linguagem Java 7 foram desenvolvidas por dois “projetos”: o Project Coin com uma coleção de pequenas melhorias, e o Project Lambda para a novidade individual mais complexa, os lambdas.

Vamos primeiro ao projeto Coin, cujo nome aliás é um trocadilho em inglês: além de coin = moeda (remetendo ao tamanho modesto de cada nova sintaxe), temos também to coin = “cunhar”, seja moedas ou palavras de uma linguagem.

Strings em Switch

mail.openjdk.java.net/pipermail/coin-dev/2009-February/000001.html

Começando pelo item mais simples, o Java agora será capaz de usar valores String no switch/case. Como mostra a ...

Quer ler esse conteúdo completo? Tenha acesso completo