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

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

    View Slide

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

    View Slide

  3. ● Professional with 10+ years
    ● Principal Software Engineer
    ● NYJavaSIG Leader
    ● graciano.dev
    ● Twitter: @rodrigograciano
    Rodrigo Graciano
    3

    View Slide

  4. Java 9 ao 11
    4

    View Slide

  5. Optional API
    ● or()
    5

    View Slide

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

    View Slide

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

    View Slide

  8. Classe String
    ● isBlank()
    ● lines()
    ● strip()
    ● stripLeading()
    ● stripTrailing()
    ● repeat()
    8

    View Slide

  9. Stream API
    ● toUnmodifiableList()
    ● toUnmodifiableSet()
    ● toUnmodifiableMap()
    9

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  13. Local Variable Type Inference - var
    Antes:
    Map> 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

    View Slide

  14. Collections API - Immutable Factory Methods
    Before:
    List numbers = new ArrayList<>(); numbers.add(1); numbers.add(2);
    Set cities = new HashSet<>(); cities.add(“New York”); cities.add(“Boston”);
    Map numbersMap = new HashMap<>(); numbersMap.put(“One”,1);
    After:
    List numbers = List.of(1,2,3);
    Set cities = Set.of(“New York”, “Boston”);
    Map mapOfIntegers = Map.of(“One”,1,”Two”,2);
    14

    View Slide

  15. Collections API
    ● List.copyOf()
    ● Set.copyOf()
    ● Map.copyOf()
    15

    View Slide

  16. Collections API
    ● toArray (IntFunction generator)
    16

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  21. Java 12 to 17
    21

    View Slide

  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

    View Slide

  23. Sealed Class
    23

    View Slide

  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

    View Slide

  25. Records
    Antes:
    25

    View Slide

  26. Records
    Depois:
    26

    View Slide

  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

    View Slide

  28. Pattern Matching
    Antes:
    Depois:
    28

    View Slide

  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

    View Slide

  30. Stream API
    ● toList() - Retorna uma List não modificável
    30

    View Slide

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

    View Slide

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

    View Slide

  33. Text Block
    Antes Depois
    33

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  37. Q&A
    37
    https://github.com/rodrigolgraciano/java-features

    View Slide