Projeto Coin - JSR 334: Movendo o java para Frente com o java 7 - Parte 2

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Nesse artigo será abordado o projeto coin, que provê pequenas melhorias, mas importantes para o desenvolvimento com o java.

            O projeto coin foi um dos projetos que entraram na nova versão do java 7, o seu objetivo foi trazer facilidades para que o desenvolvimento com o java se torne menos “verboso” em algumas atividades triviais com a linguagem. O objetivo desse artigo é estar mostrando todos os benefícios do projeto coin de um modo mais prático.

            Para iniciar com a demonstração do projeto coin  é necessário baixar tanto o jdk ambos os links estão em referências no final do artigo. Após ter baixado basta descompactar o novo java e instalar a ide, tão logo feito isso no netbeans vá em ferramentas/ plataforma java e adicione uma nova plataforma e selecione java Standart Edition, avance em seguida informe o diretório aonde está o java 7 já descompactado. Assim será criado um projeto java normalmente a  única diferença é que após criado se irá nas propriedades do projeto e será selecionado o jdk 1.7, que é o java 7.

 

Novas Funcionalidades com o Coin JSR 334

 

            O projeto coin traz pequenas melhorias para o java,  deixando em alguns caso o código mais legível, além de simplificar algumas rotinas já existentes.

             Com primeiro exemplo será mostrado  switch com Strings antes esse recurso era possível apenas com variáveis do tipo Enum e inteiros, na verdade o que ele faz basicamente não deixa de ser um inteiro já que ele faz seleção a partir do hascode. A listagem 1 mostra um pequeno exemplo dessa utilização


        String bebida = "cafe";

         switch (bebida) {

             case "cafe":
                 System.out.println("Vai precisar de leite");
                 break;
             case "suco":
                 System.out.println("Vai precisar de acucar");
                 break;
             case "refrigerante":
                 System.out.println("Vai precisar de gelo");
                 break;
 
             default:
                 System.out.println("Bebida desconhecida");
                 break;
 
         }

tabela 1: demonstração do switch com String

 

            O ARM, Automatic Resource Management ou gerenciamento de recursos automático, que consiste em não precisar se preocupar com os recursos que serão utilizados em seu programa. Tais recursos serão fechados assim que saírem do bloco try  para isso basta que o Objeto implemente o java.lang.AutoCloseable.  A interface Closeable estende AutoCloseable, sendo mais interessante o AutoCloseable, pois neste ao executar o método close() não executa nenhuma exceção.  Na listagem 2 demonstra a transferência entre arquivos e não foi necessário fechar o arquivo.


     public void copiarArquivo(File original, File copiado) throws FileNotFoundException, IOException {

         try (InputStream in = new FileInputStream(original);

                 OutputStream out = new FileOutputStream(copiado)) {

             byte[] buf = new byte[1024];

             int n;

             while ((n = in.read(buf)) >= 0) {

                 out.write(buf, 0, n);

             }

         }//sera fechado automaticamente apos operacao

     }

listagem 2: mostra a transferência de um arquivo para o outro sendo que tão logo o processo acabe os Stream serão automaticamente fechados.

 

O multi-try para alguns foi o recurso mais esperado dessa nova versão, que permite que se trate várias exceções de um bloco try em um único cath basta apenas separar as exceções por um '|' pipe. Na versão atual é necessário que você acabe colocando um cath em baixo do outro o que em alguns caso se torna totalmente indispensável além de deixar o código duplicado.

 

         File origem = new File("java.txt");

         File destino = new File("java7.txt");

 

         ExemploARM arm = new ExemploARM();

         try {

             arm.copiarArquivo(origem, destino);

         } catch (FileNotFoundException | IOException ex) {

             ex.printStackTrace();

         }

Listagem 3: execução do código da Listagem 2 utilizando multy-try

 

 

Falando ainda na melhoria que envolvem o bloco try, com o try-resource agora é possível entrar dentro do bloco try somente se conseguir o recurso, na listagem 4 mostra um exemplo desse recurso.

 

         try (BufferedReader reader = Files.newBufferedReader(arquivo, charset)) {

  

              while ((strLine = reader.readLine()) != null) {

  

                  System.out.println("Arquivo " + strLine);

  

              }

          } catch (IOException x) {

              System.err.format("IOException: %s%n", x);

Listagem 4: Usando try resource

            No java 7 também houve uma grande melhoria com os Generic e também com as coleções facilitando a criação desses tipos de objetos.  Agora é possível criar uma coleção genérica de uma maneira mais enxuta que ficou conhecido como diamond. Isso acontece por que o operador “<>” solicita ao compilador que seja inferido a construção a partir dos parâmetros definidos na referência para esse objeto. Na listagem 4 é mostrado o iniciar de alguns collections se mostra bastante simplificado em relação a versão 6, sendo que na ultima linha do código aquela instrução não compilará por falta de referência ao tipo de genérico da coleção.


         List diamont = new ArrayList<>(); //diamont

         List bebidas;

         Map> maps = new HashMap<>();

         maps.put("dimaont", bebidas = new ArrayList<>());

         maps.put("referenciado", new ArrayList());

 //    maps.put("erro",  new ArrayList<>() );

         String[] s = {"asdf"};



Listagem 4: diamond

 

Falando um pouco mais sobre coleções e genéricos se criou a anotação @SafeVarargs que informa  ao javac que essa operação é segura.

 

       @SafeVarargs

     static  List asList(T... elements) {

         System.out.println(elements);

         return null;

     }

 

     @SafeVarargs

     static void varags(List... stringLists) {

         Object[] array = stringLists;

         List tmpList = Arrays.asList(42);

         array[0] = tmpList; //semantica invalida, mas compila ser atencao

         String s = stringLists[0].get(0); // ClassCastException durante execucao

     }

 }

Listagem 5: uso da anotação @SafeVarargs faz com que compile sem

 

 

            O separador de dígitos é um recurso que permite que para melhor entendimento de números longos, que eles sejam separados por '_' a única regra é que ele não seja não o primeiro nem o ultimo valor, durante o processo de compilação esse separador é ignorado então 22 será igual a 2_2 e você pode usar esse recursos em números fracionados como float e Double. Existe também o literal para binário apesar que boa parte das aplicações corporativas não usem tal recurso vale salientar que o java não é somente uma linguagem, mas uma plataforma e será bastante útil para aplicativos embarcados, para isso basta usar como prefixo 'ob' (zero e b) seguido da sequência de binários (valores zeros e uns) e esse recurso pode também ser associado aos separadores.


         long longPrimitivo = 9_999_999_99;

         Long longObjeto = 9__3234_300l;

         double doublePrimitivo = 232_32.32_12d;

         Double doubleObjeto = 88_32.32_12d;

         int binA = 0b01_01;

         int binB = 0b0101_0111;

 

 

         if (2222 == 22_22) {

             System.out.println("Valores iguais");

         }

 

         if (binA == 5) {

             System.out.println("Equivalentes a binario");

         }

Listagem 5: uso de separador e de literal com binário

 

Conclusão:

 

Nesse artigo foi mostrado sobre uma das partes do java 7 o projeto coin, esses recursos certamente facilitarão o desenvolvimento diminuindo em alguns casos muitas linhas de código durante o desenvolvimento da aplicação.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?