fisl 11 - novidades do openjdk 7
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