Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 9 ao 17 - Oracle no TDC

Java 9 ao 17 - Oracle no TDC

1d2a6c7cfa9e96ecffe3c10a5018b1b8?s=128

Rodrigo Graciano

December 01, 2021
Tweet

More Decks by Rodrigo Graciano

Other Decks in Programming

Transcript

  1. Java 9 to 17: O que vem por aí? Rodrigo

    Graciano rodrigograciano
  2. Lançamentos do Java 2 * https://en.wikipedia.org/wiki/Java_version_history

  3. • Professional with 10+ years • Principal Software Engineer •

    NYJavaSIG Leader • graciano.dev • Twitter: @rodrigograciano Rodrigo Graciano 3
  4. Java 9 ao 11 4

  5. Optional API • or() 5

  6. Optional API (Contd) • stream() 6

  7. Optional API (Contd) • ifPresentOrElse() 7

  8. Classe String • isBlank() • lines() • strip() • stripLeading()

    • stripTrailing() • repeat() 8
  9. Stream API • toUnmodifiableList() • toUnmodifiableSet() • toUnmodifiableMap() 9

  10. Stream API (Contd) 10 • takeWhile() • dropWhile() •

  11. Stream API (Contd) 11 • ofNullable()

  12. Local Variable Type Inference - var • var não é

    um tipo de variável • Não é um atributo de classe • Não tem relação com var/val from Scala/Kotlin • Deve ser inicializado • Não é uma palavra reservada Antes: String name = “Java”; Depois: var name = “Java”; 12
  13. Local Variable Type Inference - var Antes: Map<String, List<String>> citiesLivedIn

    = Map.of("Rodrigo", of("São Paulo", "Rio de Janeiro", "Porto Alegre", "Nova Jersey", "Nova York")); Depois: var citiesLivedIn = Map.of("Rodrigo", of("São Paulo", "Rio de Janeiro", "Porto Alegre", "Nova Jersey", "Nova York")); 13
  14. Collections API - Immutable Factory Methods Before: List<Integer> numbers =

    new ArrayList<>(); numbers.add(1); numbers.add(2); Set<String> cities = new HashSet<>(); cities.add(“New York”); cities.add(“Boston”); Map<String, Integer> numbersMap = new HashMap<>(); numbersMap.put(“One”,1); After: List<Integer> numbers = List.of(1,2,3); Set<String> cities = Set.of(“New York”, “Boston”); Map<String, Integer> mapOfIntegers = Map.of(“One”,1,”Two”,2); 14
  15. Collections API • List.copyOf() • Set.copyOf() • Map.copyOf() 15

  16. Collections API • toArray (IntFunction<T[]> generator) 16

  17. Por que preferimos Immutable Collections • Um objeto é considerado

    imutável se seu estado não pode mudar depois de ser construído • Depois de criar uma instância de uma collection imutável, ela irá possuir os mesmos dados enquanto a collection existir • São mais eficientes já que não precisam se preocupar com alteração dos dados • Geralmente consumem menos memória que collections mutáveis 17
  18. Modules - Java 9 • Jigsaw • Divide a JDK

    em partes - módulos • Módulo principal é o java.base • NÃO É MANDATÓRIO usar módulos • Java 100% backward compatible Por que módulos? • Configuração é confiável • Forte encapsulamento • Permite que a plataforma Java seja escalável • Maior integridade da plataforma • Melhoria de performance 18
  19. Outras mudanças • Remove os módulos Java EE e CORBA

    • Interfaces pode ter métodos privados (estáticos e não estáticos) • Melhorias a Optional, try-with resources, Streams e Javadoc (HTML 5) • Reactive Streams API • HTTP2 • Flight Recorder • JShell • Single file source code programs 19
  20. Preview and Final Features, LTS, Non-LTS. 20 • Release cadency

    changed at Java 10 • New Java release every 6 months • LTS versions 8, 11, 17, 21 or 23 - discussions ongoing • Oracle JDK, OpenJDK, Correto, AdoptOpenJDK, Zulu, and more
  21. Java 12 to 17 21

  22. Sealed Class • Permite ao autor de uma classe ou

    interface ter o controle de qual código é responsável por implementá-lo • Provém um modo mais declarativo do que modificadores de acesso para restringir o uso de uma superclasse • Suporte para futuras implementações do pattern matching ao prover uma fundação para padrão de análises exaustivas • Possibilidade de ter uma super classe ser largamente acessível mas não largamente extensível 22
  23. Sealed Class 23

  24. Records • Records são data classes imutáveis que requerem apenas

    o tipo e nome das propriedades • Records não podem usar "extends" a não ser ao implementar interfaces • Records não são serializáveis por padrão • java.lang.Class API foi modificada para suportar. Por exemplo, dado Class<?>, podemos verificar se é um Record ou não usando o novo método isRecord() • Records geram getters públicos em que o nome é igual ao nome da propriedade (instead of getAge(), age()) 24
  25. Records Antes: 25

  26. Records Depois: 26

  27. Pattern Matching • Pattern matching involve testar quando um objeto

    tem uma dada estrutura, extraindo dados desse objeto. • Você já pode fazer isso com Java, contudo pattern matching introduz melhorias que possibilitam extrair condicionalmente os dados de uma forma mais concisa e robusta. 27
  28. Pattern Matching Antes: Depois: 28

  29. Switch Expressions var result = switch (month) { case JANUARY,

    JUNE, JULY -> 3; case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> 1; case MARCH, MAY, APRIL, AUGUST -> { int monthLength = month.toString().length(); yield monthLength * 4; } default -> 0; }; 29
  30. Stream API • toList() - Retorna uma List não modificável

    30
  31. Null Pointer Exceptions Antes: list.get(0).getName().trim() Mas quem é nulo??? 31

  32. Null Pointer Exceptions • Mensagens mais claras de NullPointerException Depois:

    32
  33. Text Block Antes Depois 33

  34. Resumo de mudanças ao Garbage Collection • Concurrent Mark and

    Sweep (CMS) • G1 (Garbage First Collector) • Experimental JIT Compiler - Graal (AOT) • Epsilon GC • Z GC - Java 11 • Shenandoah GC - Java 12 34
  35. Outras mudanças • OpenJDK migrado para o Github • JFR

    Streaming • Hidden Classes • Vector API • Strongly encapsulated JDK Internals • Deprecate Security Manager for removal • Enhanced Pseudo-Random Number Generators 35
  36. What about Project Loom? Project Loom is to intended to

    explore, incubate and deliver Java VM features and APIs built on top of them for the purpose of supporting easy-to-use, high-throughput lightweight concurrency and new programming models on the Java platform. • Virtual threads • Not mapped to OS threads 36
  37. Q&A 37 https://github.com/rodrigolgraciano/java-features