Novidades Java 7 – Project Coin

11/07/2011 | By | 11 Comments

Na semana passada estive presente na festa de lançamento do Java 7, durante o TDC 2011 e foi bem legal. Fiquei ansiosa por usar o Java 7, e decidi ir pra casa brincar um pouco com as novas features.

java7 loiane 11 Novidades Java 7   Project Coin

Fotos do evento: http://www.flickr.com/photos/loiane/sets/72157627015952961/

Vídeo do Evento (Oracle): http://blogs.oracle.com/java/entry/java_7_celebration_begins

Slides: http://blogs.oracle.com/darcy/resource/ProjectCoin/CoinLaunch.pdf

duke java7 Novidades Java 7   Project CoinSempre acompanhava blogs e fóruns com a lista das novidades, mas nem todas entraram para essa release. Neste post vou listar e dar exemplos das que realmente entraram.

O primeiro passo é fazer download do Java 7. Nesse caso usei Windows mesmo (:/).

Como a Oracle só vai lançar o Java de verdade no fim do mês de julho (2011), o Eclipse ainda não tem suporte nativo. Tem apenas um plugin que está na versão beta. Decidi não usar.

Vou então usar o NetBeans, que já está com suporte ao Java 7. Se você instalar o Java 7 e depois instalar o NetBeans, vai perceber que a JDK padrão já é a versão 7.

Quando criar um projeto Java no NetBeans, o compilador do projeto será Java 7, mas o compilador do código fonte ainda vai estar na versão 6. Para funcionar com o Java 7, é necessária fazer uma pequena mudança.

Vamos então começar a brincar com o Project Coin:

Strings in Switch:

Para todos os exemplo, tentei primeiro escrever o código como escrevemos hoje (Java 6) para depois tentar converter para o Java 7. O legal do NetBeans, é que ele já vem com algumas dicas de mudanças e faz isso automaticamente pra gente.

Primeiro, fiz comparação de Strings com if-else. O NetBeansme mostrou um warning sugerindo para trocar:

java7 loiane 01 Novidades Java 7   Project Coin

E se aceitar a mudança, vai trocar para:

java7 loiane 02 Novidades Java 7   Project Coin

E o código:

Antes:

 public void testStringInSwitch(String param){

        final String JAVA5 = "Java 5";
        final String JAVA6 = "Java 6";
        final String JAVA7 = "Java 7";

        if (param.equals(JAVA5)){
            System.out.println(JAVA5);
        } else if (param.equals(JAVA6)){
            System.out.println(JAVA6);
        } else if (param.equals(JAVA7)){
            System.out.println(JAVA7);
        }
    }

Java7:

 public void testStringInSwitch(String param){

        final String JAVA5 = "Java 5";
        final String JAVA6 = "Java 6";
        final String JAVA7 = "Java 7";

        switch (param) {
            case JAVA5:
                System.out.println(JAVA5);
                break;
            case JAVA6:
                System.out.println(JAVA6);
                break;
            case JAVA7:
                System.out.println(JAVA7);
                break;
        }
    }

Binary Literals:

Antes:

public void testBinaryIntegralLiterals(){

        int binary = 8;

        if (binary == 8){
            System.out.println(true);
        } else{
            System.out.println(false);
        }
}

Java7:

 public void testBinaryIntegralLiterals(){

        int binary = 0b1000; //2^3 = 8

        if (binary == 8){
            System.out.println(true);
        } else{
            System.out.println(false);
        }
}

O NetBeans também dá dica para trocar um número literal para um binário literal:

java7 loiane 09 Novidades Java 7   Project Coin

Para

java7 loiane 10 Novidades Java 7   Project Coin

public void testUnderscoresNumericLiterals() {

        int oneMillion_ = 1_000_000;
        int oneMillion = 1000000;

        if (oneMillion_ == oneMillion){
            System.out.println(true);
        } else{
            System.out.println(false);
        }
    }

Underscore Between Literals:

public void testUnderscoresNumericLiterals() {

	int oneMillion_ = 1_000_000; //new
    int oneMillion = 1000000;

    if (oneMillion_ == oneMillion){
		System.out.println(true);
    } else{
        System.out.println(false);
    }
}

Diamond Syntax:

Before:

public void testDinamond(){

    List<String> list1 = new ArrayList<String>();
    Map<String, List<String>> map1 = new HashMap<String, List<String>>();
}

Java7:

public void testDinamond(){
      List<String> list = new ArrayList<>();
      Map<String, List<String>> map = new HashMap<>();
}

O NetBeans também dá dica:

java7 loiane 05 Novidades Java 7   Project Coin

Para

java7 loiane 06 Novidades Java 7   Project Coin

Multi-Catch Similar Exceptions:

Antes:

    public void testMultiCatch(){

        try {
            throw new FileNotFoundException("FileNotFoundException");
        } catch (FileNotFoundException fnfo) {
            fnfo.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
   }

Java 7:

    public void testMultiCatch(){

        try {
            throw new FileNotFoundException("FileNotFoundException");
        } catch (FileNotFoundException | IOException fnfo) {
            fnfo.printStackTrace();
        }
    }

Mesma coisa aqui. Dica para converter o código para Java 7:

java7 loiane 03 Novidades Java 7   Project Coin

Para

java7 loiane 04 Novidades Java 7   Project Coin

Try with Resources:

Antes:

    public void testTryWithResourcesStatement() throws FileNotFoundException, IOException{

         FileInputStream in = null;
        try {
            in = new FileInputStream("java7.txt");

            System.out.println(in.read());

        } finally {
            if (in != null) {
                in.close();
            }
        }

    }

Java 7:

    public void testTryWithResourcesStatement() throws FileNotFoundException, IOException{

        try (FileInputStream in = new FileInputStream("java7.txt")) {

            System.out.println(in.read());

        }
    }

Dica:

java7 loiane 07 Novidades Java 7   Project Coin

Para:

java7 loiane 08 Novidades Java 7   Project Coin

A simplificação de varargs também entrou na lista. Mas não entendi direito como usar. Talvez porque nunca tenha usado varargs profissionalmente em um projeto. Item para estudar mais!

Existem outras features que foram submetidas, mas não entraram nessa release:

O código apresentado neste post não é apenas teoria, já funciona no NetBeans e pode já pode ser usado em projetos. Você pode fazer o download no meu github: https://github.com/loiane/Java7HelloWorld

Um update: A DZone lançou um um RefCardz sobre NetBeans e Java 7 – o download é gratuito: http://refcardz.dzone.com/refcardz/netbeans-ide-7-programming

Filed in: Java, Tutoriais | Tags: , , ,

Comments (11)

  1. Bruno

    Oi Loiane!

    Primeiramente queria dizer que curto muito tuas explicações sobre Ext-JS, estou aprendendo bastante!

    “Segundamente”, deixa eu perguntar… Ou era você ou tinha uma sósia tua fazendo compras no Pão de Açucar aqui da Francisco Morato agora há pouco? Hahaha

    Como eu não te conheço e só vi você aqui pelo site, fiquei meio assim de perguntar…rs

    Valeu! E parabéns pelo trabalho :)

  2. Tiago

    Parabéns pelo post, mto legal a comparação de mudanças, ficou mto claro e explicativo.

  3. Olá Loiane, parabéns pelo post com as features… fiquei muito feliz em ver que a nova versão foi finalmente lançada… Vida longa ao Java

    Um abraço

  4. Achei estranha a parte sobre “Try with Resources”. A primeira vista não curti muito essa parte.  
    Valeu pelas dicas Loiane.

  5. Gabriel A.

    Muito bom esse teu post, Loiane!

     Não conhecia teu blog e, ao ver o link para esse post eu temi o de sempre: “será que é mais um daqueles artigos que repetem explicações teóricas lidas em outro lugar sem muita objetividade?”. Foi quando vi que tudo aqui é testado e explicado como programadores devem fazer: com código :)

    Parabens pelo trabalho.

  6. Oi Loiane, post muito interessante. Ficou bem claro entender as features que eu ainda não tinha assimilado corretamente.

    Parabéns pelo post e “vida longa ao java”. :)

  7. Philippe

    Seu post foi muito esclarecedor…

    Realmente tbm não gostei muito do try with resources…

    E na sintaxe Diamond, existe um possível erro discutido aqui: http://thecoderlounge.blogspot.com/2011/07/java-7-support-in-eclipse-jdt-beta-part_22.html?spref=fb

  8. Rafael William

    Gostei do try com Resources.

Leave a Reply

Trackback URL | RSS Feed for This Entry