Confira o que há de novo no java 7

25, maio 2012   •   (Não há comentários)   •   Autor: Thiago Dieb

Para quem está antenado com as novidades não pode deixar passar a oportunidade de verificar as novidades do Java 7. Temos algumas coisas que facilitam muito nossa programação, por outro lado pode criar muitos problemas para os novatos no momento de uma leve regressão a uma versão mais velha.

Lendo alguns artigos interessante resolvei fazer um breve resumo do que temos de novo, confira:

Strings in Switch

O switch nas versões anteriores só aceitava variações de interiose enun, agora com o java 7 podemos utilizar String em sua comparação.

public class StringNoSwitch {
     public static void main(String[] args) {
        for (String param : args) {
          switch(param) {
             case "-dev":
                System.out.println("Ambiente de Devel");
             break;
             case "-prod":
                System.out.println("Ambiente de Produção");
             break;
             default:
             System.err.printf("Parâmetro %s não reconhecido\n", param);
             System.exit(-1);
         }
       }
    }
}

Multi-Catch Similar Exceptions

Muito bacana essa modificação no bloco do Catch, creio que fizeram isso justamente para respeitar a Regra do DRY. Com essa alteração podemos colocar várias exceptions no mesmo bloco de do catch, observe:

public void testMultiCatch(){
    try {
        throw new FileNotFoundException("FileNotFoundException");
    } catch (FileNotFoundException | IOException e) {
        e.printStackTrace();
    }
}

Try-with-resources Statement

Contiuando na mesma área de exception. Uma modificação que tornou desnecessário o uso do bloco finally em um try/finally. Agora o Java 7 identifica o que deve ser feito no finally, por exemplo, o fechamento do stream do arquivo, tanto em uma execução sem erros como em uma execução que gere alguma exceção. Analise o código a seguir.

    public static void testTryWithResources() throws IOException {
        try (FileInputStream ins = new FileInputStream("arquivo.txt")) {
            ins.read();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Esse processo só se faz, porque a classe FileInputStream implementa a interface AutoCloseable criada nessa nova versão.

Binary Literals

Com sua herança a linguagem C, tradicionalmente o java tem forçado os programadores a representar números em decimal. A novidade é que podemos criar números binários usando um prefixo 0b, veja como.

public void testBinaryIntegralLiterals(){

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

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

Underscore Between Literals

A fim de facilitar a legibilidade do código durante a programação, o Java 7 permite separar os dígitos de um literal em grupos por meio de Underscore. Essa modificação pode ser aplicada a tipos primitivos de dados ou literais inteiros e de ponto flutuante.

long numero = 1_000_000;
float outroNumero = 1000_00.0f;

O underscore só não pode estar no começo ou final do literal.

Long numero = _100;
float outroNumero = 100_f;

Simplified Generics – Diamond Syntax

Não posso deixar de comentar esse novo recurso, simplesmente facilitará a vida no momento da utilização de Generics. Com esse recurso não é mais obrigatório definir o tipo da classe ou interface genérica do lado direito (da atribuição). Note como ficou.

import java.util.*;
public class InferenciaGenerics {
   public static void main(String[] args) {
     Map> mapOfIntegers = new HashMap<>();
     Integer aKey = 10;
     Set aSet = new HashSet<>();
     mapOfIntegers.put(aKey, aSet);
  }
}

Simplified Varargs Method Invocation

Quando um programador tenta chamar métodos com “varargs” (parâmetros variáveis)  com um tipo de variável definida o compilador gera  um warning. No JDK 7 podemos desativar esse aviso incluindo uma anotação na declaração do método.

import java.util.*;
public class HelloJava7Varargs {
    @SuppressWarnings({"unchecked"})
    public static void main(String[] args) {
        Set aSet = new HashSet();
        List> listOfSets = Arrays.asList(aSet);
    }
}

O que mais chamou a atenção nessas alterações foi que o java cada vez mais mostrar estar aberto para alterações que trazem facilidade aos seus programadores. Fico por aqui.

Fontes: