fisl 11 - novidades do openjdk 7

Download FISL 11 - Novidades do OpenJDK 7

If you can't read please download the document

Upload: leandro-nunes

Post on 26-May-2015

2.781 views

Category:

Technology


0 download

DESCRIPTION

Palestra sobre as Novidades do OpenJDK 7 apresentadas por Leandro Nunes no FISL 11.

TRANSCRIPT

  • 1. Novidades do OpenJDK 7

2. whoami

  • Leandro Nunes
  • SCJP

3. Coordenador RSJUG 4. Blog

  • http://leandron.wordpress.com

5. O projeto OpenJDK 6. O projeto OpenJDK

  • Anunciado em 2006

7. Libera o cdigo fonte da implementao de Java da Sun sob uma licena livre 8. Hoje isso uma realidade... 9. Project Coin 10. Configurao do NetBeans

  • Para fazer as demonstraes e testes, temos que configurar o NetBeans para usar Java 7

11. Passos

  • Properties > Libraries > Manage Platforms

12. Add Platform > Selecione o diretrio de instalao 13. Sources > Source/Binary Format: JDK 7 14. Configurao do NetBeans 15. Configurao do NetBeans 16. Project Coin

  • Este projeto introduz diversas pequenas mudanas na especificao da linguagem Java

17. http://openjdk.java.net/projects/coin/ 18. Grande parte dessas mudanas j est disponvel nos builds de desenvolvimento 19. Nesta palestra, estamos usando o build de 15 de julho de 2010

  • Build 101

20. Strings emswitch Strings="abc" ; switch( s ) { case"abc" : processAbc(s); break; case"def" : case"DEF" : processDef(s); break; case"ghi" : processGhi(s); default: processDefault(s); break; }

  • Nas verses anteriores apenas era permitido com tipos inteiros e Enums

Disponvel 21. Verificao automtica denull s

  • Para validar uma referncia nula era necessrio testar vrias possibilidades

String aMember = null; if (g != null && g.members != null && g.members[0].name != null ) { aMember = g.members[0].name; } else { aMember = "nobody"; } 22. Verificao automtica denull s

  • A mesma verificao pode ser feita da seguinte forma

final StringaMember= g?.members?[0]?.name ?: "nobody"; Ainda no disponvel 23. Tipos Inteiros

  • Suporte representao de binrios

24. Separadores para aumentar a legibilidade

  • Usando _

Novos sufixos para inteiros

  • y: byte

25. s: short 26. Representao de binrios

  • Pode-se representar diretamente binrios

//equivalente ao numero 12, em decimal int numeroDecimal =12 ; int numeroBinario =0b1100 ; Disponvel 27. Separadores de inteiros

  • So ignorados para compilao e execuo

28. Destinam-se exclusivamente para aumentar a legibilidade int numeroDoTelefone =555_555_1212 ; int numeroDoCartao =5555_5555_5555_5555 ; Disponvel 29. Sufixos parabyteeshort

  • Nas verses anteriores existiam sufixos para float f e long ' l '

30. Para os tiposbytee short, a mudana explcita de tipo devia ser feita com casting Ainda no disponvel byte [] stuff = { (byte)0x80, (byte)0xFF}; byte [] java7 = { 0x80 y , 0xFF y}; 31. Sufixos parabyteeshort

  • Nas verses anteriores existiam sufixos para float f e long ' l '

32. Para os tipos byte eshort , a mudana explcita de tipo devia ser feita com casting short[] stuff = {(short) 0x80,(short) 0xFF}; short[] java7 = { 0x80 s , 0xFF s}; Ainda no disponvel 33. Declao de Generics Simplificada

  • Evitando a redundncia

Map >anagrams = new HashMap > (); Map >anagrams = new HashMap (); Disponvel 34. Acesso indexado listas e mapas

  • Usando os colchetes [ ] para acessar os itens
  • List:myList[1]

35. Map:myMap[keyObject] Ainda no disponvel 36. Inicializao de Collections

  • Declarao simplificada de collections inicializadas

37. Na verso Java 7 fica assim.. final List piDigits = Collections.unmodifiableList( Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9) ); final ListpiDigits= [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9] ; Ainda no disponvel 38. Inicializao de Collections

  • Para os mapas, a reduo de cdigo ainda maior...

final Map platonicSolids; static { solids = new LinkedHashMap; solids.put(4, "tetrahedron"); solids.put(6, "cube"); solids.put(8, "octahedron"); solids.put(12, "dodecahedron"); solids.put(20, "icosahedron") ; PlatonicSolids = Collections.immutableMap(solids); } 39. Inicializao de Collections final Map platonicSolids = { 4 : "tetrahedron", 6 : "cube", 8 : "octahedron", 12 : "dodecahedron", 20 : "icosahedron" }; Ainda no disponvel 40. Tratamento de Excees

  • Para tratar vrias excees com um cdigo igual temos que...

} catch (Exception1 ex) { LOGGER.log(Level.SEVERE, ex); throw ex; } catch (Exception2 ex) { LOGGER.log(Level.SEVERE, ex); throw ex; } 41. Tratamento de Excees

  • Em Java 7...

} catch (Exception1 | Exception2 ex) { LOGGER.log(Level.SEVERE, ex); throw ex; } 42. Gerenciamento de recursos

  • Em Java < 7, a responsabilidade de fechar os recursos do programador

static String readFirstLineFromFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } } 43. Gerenciamento de Recursos

  • A partir do Java 7 esse gerenciamento pode ser feito de forma automtica

44. Modificao no blocotry static String readFirstLineFromFile2(String path) throws IOException { try ( BufferedReader br = new BufferedReader(new FileReader(path) ){ return br.readLine(); } } Aqui o recurso automaticamente fechado Ainda no disponvel 45. Project Lambda 46. Project Lambda

  • Conhecido como implementao de Closures

47. http://openjdk.java.net/projects/lambda/ 48. Embora esteja nos builds de desenvolvimento, ainda poder sofrer mudanas 49. Project Lambda

  • Closures podem ser encaradas como
  • Funes annimas

Exemplo de expresses lambda simples # (int x) (2*x) # (int x, int y) (x+y) 50. Project Lambda

  • Podemos invocar diretamente uma expresso lambda (parte em vermelho)

# (int x) (2*x) .(7) 51. Project Lambda

  • Varivel para expresso
  • Atribui uma funo para uma varivel

#int(int)doubler=# (int x) (2*x); int n =doubler .(3) ; //n = 6 Retorno Parametro 52. Project Lambda

  • Funes um pouco mais complexas

#int(int, int)min=# (int x, int y){if (x