Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Created June 11, 2024 04:22
Show Gist options
  • Save renatoapcosta/a58fe84a44bfcc429fd064b87e6239f6 to your computer and use it in GitHub Desktop.
Save renatoapcosta/a58fe84a44bfcc429fd064b87e6239f6 to your computer and use it in GitHub Desktop.
Java 17 - Principais Funcionalidades

Java 17 - Principais Funcionalidades

1. Sealed Classes

Novo:

public sealed class Shape permits Circle, Rectangle {
    // Classe base selada
}

final class Circle extends Shape {
    // Implementação para círculo
}

final class Rectangle extends Shape {
    // Implementação para retângulo
}

Antes: Anteriormente, não havia uma maneira direta de limitar quais classes poderiam estender uma classe base, o que era menos seguro e dificultava a manutenção.

2. Pattern Matching para instanceof

Novo:

if (obj instanceof String s) {
    System.out.println(s.toUpperCase());
}

Antes:

if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.toUpperCase());
}

Este recurso simplifica a verificação e o casting de tipos, reduzindo a redundância.

3. Records

Novo:

public record Point(int x, int y) {}

Antes:

public class Point {
    private final int x;
    private final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() { return x; }
    public int getY() { return y; }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}

Records são uma maneira concisa e segura de criar classes de dados imutáveis.

4. Text Blocks

Novo:

String html = """
              <html>
                  <body>
                      <p>Hello, world!</p>
                  </body>
              </html>
              """;

Antes:

String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, world!</p>\n" +
              "    </body>\n" +
              "</html>";

Text Blocks facilitam o trabalho com strings multilinhas, melhorando a legibilidade e manutenção do código.

5. Enhanced Pseudo-Random Number Generators

Novo:

RandomGenerator random = RandomGeneratorFactory.of("L128X256MixRandom").create(12345);

Antes:

Random random = new Random(12345);

A nova API fornece uma abordagem mais rica e configurável para gerar números pseudo-aleatórios, suportando vários algoritmos.

6. Foreign Function & Memory API (Incubator)

Novo:

try (MemorySegment segment = MemorySegment.allocateNative(100)) {
    MemoryAddress base = segment.baseAddress();
    segment.setAtIndex(MemoryLayouts.JAVA_INT, 0, 123);
}

Antes: A interação direta com memória nativa era complexa e arriscada, geralmente realizada através de bibliotecas JNI, que são menos seguras e mais verbosas.

Este conjunto de funcionalidades melhora significativamente a robustez, segurança e legibilidade do código Java, alinhando-se com as práticas modernas de desenvolvimento de software.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment