Mudanças no Java 7

Boa Tarde Soldados!
Venho aqui lhes passar algumas informações sobre nosso amiguinho java & que depois de tantos anos de espera finalmente saiu.


A lista de novas features podem ser encontradas aqui
O novo javadoc esta localizado neste link.

1) Switch com strings.
Por mais simples que essa feature possa parecer, é um grande avanço para o JAVA a funcionalidade de utilização de String dentro do bloco switch. Antes era possível utilizar o switch apenas com números inteiros. Quando precisávamos comparar String era necessário utilizar blocos if/else encadeados.
Um exemplo de código de comparação de String em Java:

01String temp = "Java";
02if(temp != null && temp.equals("Cobol")) {
03    System.out.println("Utilizando Cobol");
04} else if(temp != null && temp.equals("DOT NET")) {
05    System.out.println("Utilizando DOT NET");
06} else if(temp != null && temp.equals("Java")) {
07    System.out.println("Utilizando Java");
08} else {
09    System.out.println("Não faço idéia");
10}
Blocos if/else encadeados são mais confusos e difíceis de ler. A opção de um bloco switch torna o mesmo código mais simples e com uma aparência clean:

01String temp = "Java";
02
03switch(temp) {
04    case "Cobol":
05        System.out.println("Utilizando Cobol");
06        break;
07    case "DOT NET":
08        System.out.println("Utilizando DOT NET");
09        break;
10    case "Java":
11        System.out.println("Utilizando Java");
12        break;
13    default:
14        System.out.println("Não faço idéia");
15}
Fica muito mais claro o fluxo dos blocos sem contar que podemos remover a instrução break e assim executar todos os blocos abaixo de forma simples. Assim como no if / else o switch utiliza o método equals para comparar as strings e por isso é case sensitive.

2) Declaração de literais e o uso do underscore
Agora é possível declarar números binários para variáveis inteiras em java. Isso é bem útil para quem utiliza o Java com linguagens de baixo nível.
Um exemplo das novas possibilidade para números inteiros esta no código abaixo:

01//apenas a declaração de um inteiro
02int normal = 5;
03//declaração de um inteiro como hexadecimal com o prefixo '0x' / '0X'
04int hexadecimal = 0x1A;
05//declaração de octal com o prefixo '0'
06int octal = 02; //poucos sabem mais o número zero na frente deixa o inteiro com base 8
07//NOVIDADE java 7 declaração de binário com o prefixo '0b' / '0B'
08int binario = 0b1001;
09//Possível separar números por underscore. Facilita a declaração de números grandes
10int contaBancaria = 10_000_000;
A nova funcionalidade de declaração de variáveis utilizando o underscore como separador é útil para declararmos números com muitos algarismos. Quem nunca se deparou contando o número de zeros de uma variável?
Não podemos utilizar o underscore nos seguintes casos:
  • No início ou fim de um número
  • Junto (antes ou depois) com um ponto numa variável double/float
  • Junto (antes ou depois de um caractere declarativo (x, b ou l)
Exemplos de declaração inválidade:

1int valor1 = _0;
2int valor2 = 0_;
3double double1 = 0._2;
4double double2 = 0_.2;
5int hexa1 = 0_x21;
6int hexa2 = 0x_21;
7int bin1 = 0b_00_1;
3) try-with-resources e multi-catch.
Utilizar com inteligência os recursos do computador como sockets, streams, etc, é importantíssimo e sempre deu um trabalho extra para os desenvolvedores. Criar variáveis fora do try, fechar cada uma delas dentro do finally etc. Por vezes demorava o mesmo tempo criar uma implementação e o código para tratar erros e fechar recursos.
Agora essa tarefa é facilitada pois podemos passar atributos para a cláusula try. Os atributos declarados dentro deste bloco são automaticamente fechados após a execução mesmo que ocorra uma exceção.
Para isso é preciso que o Objeto passado como parâmetro implemente a interface AutoCloseable. 

1try(PreparedStatement ps = null;
2    ResultSet rs = null;) {
3
4    //code
5
6} catch(SQLException | IOException e) {
7    e.printStackTrace();
8}
Na cláusula catch do código acima, também esta uma nova funcionalidade do java 7 que nos possibilita tratar mais de uma exception num único bloco catch. Essa funcionalidade é útil pois evita códigos replicados em várias cláusulas catch.
Achei essas mudanças muito práticas e não vejo a hora de poder usá-las no dia-a-dia com java.
4) Parâmetros para construtor com Genéricos
Outro pequeno detalhe para tornar a linguagem Java mais prazerosa de se utilizar. Normalmente quando declaramos genéricos precisamos especificar o tipo que queremos no lado esquerdo (na declaração da variável) e no lado direito (no construtor). Isso não sera mais preciso, basta colocarmos os sinais de generics () do lado direito que automaticamente o compilador irá utilizar os objetos do lado esquerdo.

1Map<Integer, String> mapa = new HashMap<>();
2mapa.put(1, "valor");

Comentários

Postagens mais visitadas deste blog

E Esse Tal de Nano Service?

Executar Audio em Java Swing

Validando Email em Java Com e Sem expressão Regular