Your SlideShare is downloading. ×
0
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Project coin pequenas mudanças grandes facilidades

143

Published on

Apresentação realizada no dia 07/07/2011 no TDC 2011, com o objetivo de mostrar como as pequenas alterações na linguagem implementadas no JDK7, definidas na JSR 334 (Project Coin), podem facilitar a …

Apresentação realizada no dia 07/07/2011 no TDC 2011, com o objetivo de mostrar como as pequenas alterações na linguagem implementadas no JDK7, definidas na JSR 334 (Project Coin), podem facilitar a vida do desenvolvedor.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
143
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Project Coin: Pequenas mudanças, grandes facilidades Marcelo de Castro Wellington Ricardo Pinheiroquarta-feira, 24 de agosto de 2011
  2. Melhorias na Linguagem Java • Máquina Virtual • Linguagem (sintaxe e semântica) • Class Loader • Internacionalização • I/O e Rede • Segurança e Criptografia • JDBC • Camada Cliente • Gerenciamento (JMX e MBeans)quarta-feira, 24 de agosto de 2011
  3. Melhorias na Linguagem Java • Máquina Virtual • Linguagem (sintaxe e semântica) • Class Loader • Internacionalização • I/O e Rede • Segurança e Criptografia • JDBC • Camada Cliente • Gerenciamento (JMX e MBeans)quarta-feira, 24 de agosto de 2011
  4. Melhorias na Linguagem Java (sintaxe e semântica) • JSR 334: Small Enhancements to the JavaTM Programming Language • Especificação do projeto Coin (subprojeto do OpenJDK) • O objetivo do projeto é prover melhorias para a linguagem Javaquarta-feira, 24 de agosto de 2011
  5. Separador de dígitos em literais numéricos public class SeparadorDigitos { public static void main(String[] args) { int i = 1_234_567_890; // isso é medonho...mas compila! Integer i1 = new Integer(12_34_56_78_90); Integer i2 = new Integer(1_2_3_4_5_6_7_8_9_0); System.out.println(i == i1); // imprime true System.out.println(i1.equals(i2)); // imprime true } }quarta-feira, 24 de agosto de 2011
  6. Separador de dígitos em literais numéricos Também é possível fazer isso: float f1 = 123_456.7_5F; double d1 = 12____345D; double d2 = 0x1.ffff_ffff_ffff_fP1_023;quarta-feira, 24 de agosto de 2011
  7. Separador de dígitos em literais numéricos Também é possível fazer isso: float f1 = 123_456.7_5F; double d1 = 12____345D; double d2 = 0x1.ffff_ffff_ffff_fP1_023; Isso não compila: int intRuim1 = _1234; int intRuim2 = 1234_; float zuado = 123_456.75_F;quarta-feira, 24 de agosto de 2011
  8. Literais binários Tarefa: Construir um método para imprimir os estados de uma válvula, que podem ser: 001 Alarme 010 Fechada 100 Aberta o método recebe como entrada um inteiro com obtido na última leitura e deverão ser verificados quais os bits de estado estão com o valor 1.quarta-feira, 24 de agosto de 2011
  9. Literais binários 1 public static final int ALARME = 0b001; // o valor é 1 2 public static final int FECHADA = 0b010; // o valor é 2 3 public static final int ABERTA = 0b100; // o valor é 4 4 public void mostraEstado(int ultimaLeitura) { 5 final int[] mascaras = {ALARME, FECHADA, ABERTA}; 6 final String[] mensagens = {"alarme", "fechada", "aberta"}; 7 for (int i = 0; i < mascaras.length; i++) { 8 if ((ultimaLeitura & mascaras[i]) == mascaras[i]) 9 System.out.print(mensagens[i] + " "); 10 } 11 System.out.println(); 12 }quarta-feira, 24 de agosto de 2011
  10. String na condição do switch • Os compiladores são responsáveis por traduzir um switch de strings em bytecode com a semântica adequada • Suporte direto a strings no switch pode ser adicionado em uma futura versão da plataformaquarta-feira, 24 de agosto de 2011
  11. String na condição do switch 1 public static void main(String[] args) { 2 for (String arg : args) { 3 switch(arg) { 4 case "-o1": 5 System.out.println("modo de alta otimização (+lento)"); 6 break; 7 case "-o0": 8 System.out.println("modo de baixa otimização (+rápido)"); 9 break; 10 default: 11 System.err.printf("Parâmetro %s inválido. n", param); 12 System.exit(-1); 13 } 14 } 15 }quarta-feira, 24 de agosto de 2011
  12. Inferência na criação de objetos com tipos genéricos • Desde a introdução dos tipos genéricos, construções com tipos genéricos explícitos podem ser atribuídos à variáveis raw type (sem generics) ou com um wildcard: // Java 5+ // desencorajado, mas legal List rawList = new ArrayList<Object>(); List<?> wildList = new ArrayList<Object>(); // consequentemente, no Java 7: List rawList = new ArrayList<>(); List<?> wildList = new ArrayList<>();quarta-feira, 24 de agosto de 2011
  13. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<Integer, Set<Integer>>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<Integer>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 }quarta-feira, 24 de agosto de 2011
  14. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 }quarta-feira, 24 de agosto de 2011
  15. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 }quarta-feira, 24 de agosto de 2011
  16. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet; 7 mapOfIntegers.put(aKey, aSet = new HashSet<>()); 8 } 9 }quarta-feira, 24 de agosto de 2011
  17. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } }quarta-feira, 24 de agosto de 2011
  18. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } } O seguinte warning é apresentado ao compilarmos a classe: creation of type java.util.Set<java.lang.Integer>[] for varargs parameter List<Set<Integer>> listOfSets = Arrays.asList(aSet);quarta-feira, 24 de agosto de 2011
  19. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } } Compilando o programa com a opção -XD-printflat public class TesteVarargs { public static void main(String[] args) { Set aSet = new HashSet(); List listOfSets = Arrays.asList(new Set[]{aSet}); } }quarta-feira, 24 de agosto de 2011
  20. Simplificação na invocação de métodos varargs Método asList da classe Arrays public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } Mas esse warning é gerado na chamada de qualquer método com assinatura do tipo: <T> Tipo<T> metodo(T... params)quarta-feira, 24 de agosto de 2011
  21. Simplificação na invocação de métodos varargs A solução para o problema é criar uma forma de informar ao compilador que a chamada ao método asList não corre o risco de dar problemasquarta-feira, 24 de agosto de 2011
  22. Simplificação na invocação de métodos varargs A solução para o problema é criar uma forma de informar ao compilador que a chamada ao método asList não corre o risco de dar problemas @SafeVarargs @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }quarta-feira, 24 de agosto de 2011
  23. Simplificação na invocação de métodos varargs • Os métodos e construtores da plataforma anotados com @SafeVarargs são: public static <T> List<T> java.util.Arrays.asList(T... a) public static <T> boolean java.util.Collections.addAll( Collection<? super T>, c, T ... elements) public static <E extends Enum<E>> java.util.EnumSet<E> EnumSet.of(E first, E .... rest) protected final void javax.swing.SwingWorker.publish( V ... chunks)quarta-feira, 24 de agosto de 2011
  24. Gerenciamento automático de recursos • Criação da nova interface java.lang.AutoCloseable • Bibliotecas adaptadas para implementar a nova interface • java.lang.Throwable, um novo construtor e dois novos métodos, para facilitar o gerenciamento de exceções suprimidasquarta-feira, 24 de agosto de 2011
  25. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 FileReader reader = null; 3 try { 4 reader = new FileReader("arquivo"); 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } finally { 9 if(reader != null) { 10 try { 11 reader.close(); 12 } catch (IOException e) { 13 // tenta fazer alguma outra coisa aqui! 14 } 15 } 16 } 17 }quarta-feira, 24 de agosto de 2011
  26. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 FileReader reader = null; 3 try { 4 reader = new FileReader("arquivo"); 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } finally { 9 if(reader != null) { 10 try { 11 reader.close(); 12 } catch (IOException e) { 13 // tenta fazer alguma outra coisa aqui! 14 } 15 } 16 } 17 }quarta-feira, 24 de agosto de 2011
  27. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 3 try(FileReader reader = new FileReader("arquivo")) { 4 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } 9 }quarta-feira, 24 de agosto de 2011
  28. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 3 try(FileReader reader = new FileReader("arquivo")) { 4 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } 9 } Qualquer classe que implementa a interface java.lang.AutoCloseable pode ser “gerenciada” pelo try!quarta-feira, 24 de agosto de 2011
  29. Multicatch e Rethrow mais preciso • A cláusula catch está habilitada para uma série de tipos exceções separadas pelo operador “OR”, símbolo “|”, na declaração do parâmetro • Se o parâmetro de uma exceção não for modificado e for relançado dentro do bloco catch, o compilador aplica uma análise mais precisa dos tipos que podem ser lançadosquarta-feira, 24 de agosto de 2011
  30. Multicatch private Object instantiate(Class<?> clazz) { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); } catch (IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); } }quarta-feira, 24 de agosto de 2011
  31. Multicatch private Object instantiate(Class<?> clazz) { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); } }quarta-feira, 24 de agosto de 2011
  32. Rethrow mais preciso private Object instantiate(Class<?> clazz) { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); } }quarta-feira, 24 de agosto de 2011
  33. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw e; } }quarta-feira, 24 de agosto de 2011
  34. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw e; } }quarta-feira, 24 de agosto de 2011
  35. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (Exception e) { System.err.println("Erro na criação do objeto"); throw e; } } Isso compila?quarta-feira, 24 de agosto de 2011
  36. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (Exception e) { System.err.println("Erro na criação do objeto"); throw e; } } Isso compila? No Java 6 não compila!! No Java 7 compila!!quarta-feira, 24 de agosto de 2011
  37. Conclusões • Com a nova versão do Java pretende-se reduzir a verbosidade da linguagem • Após o lançamento do Java 7, é sua vez de testar!! Baixe a versão e divirta-sequarta-feira, 24 de agosto de 2011
  38. FIM Perguntas? Marcelo de Castro @mcastroinfo Wellington Pinheiro @wrpinheiroquarta-feira, 24 de agosto de 2011

×