Java 16, lançado em março de 2021, trouxe várias funcionalidades novas e aprimoramentos que continuam a evolução incremental da linguagem Java. Este artigo explora as principais novidades do Java 16, destacando como essas mudanças impactam o desenvolvimento de software.
1. Records (Feature Completa)
Os Records, que estavam em preview nas versões anteriores, foram finalizados e integrados como uma feature padrão no Java 16 (JEP 395). Eles simplificam a criação de classes de dados imutáveis:
public record Point(int x, int y) {}
2. Pattern Matching para instanceof
(Feature Completa)
O Pattern Matching para instanceof
, introduzido como preview em versões anteriores, foi finalizado no Java 16 (JEP 394). Esta funcionalidade simplifica a verificação de tipos e o casting:
if (obj instanceof String s) {
System.out.println(s.toLowerCase());
}
3. Sealed Classes (Segundo Preview)
As Sealed Classes, que controlam quais classes ou interfaces podem estendê-las, continuam como uma feature preview no Java 16 (JEP 397). Elas oferecem maior controle sobre a hierarquia de classes:
public abstract sealed class Shape
permits Circle, Square, Rectangle {}
public final class Circle extends Shape {}
public final class Square extends Shape {}
public final class Rectangle extends Shape {}
4. Foreign Linker API (Incubator)
A Foreign Linker API (JEP 389) foi introduzida em incubação, permitindo que Java chame código nativo de maneira mais segura e eficiente do que o JNI:
CLinker linker = CLinker.systemCLinker();
MethodHandle printf = linker.downcallHandle(
linker.lookup("printf").get(),
MethodType.methodType(int.class, MemoryAddress.class),
FunctionDescriptor.of(CLinker.C_INT, CLinker.C_POINTER)
);
5. Vector API (Incubator)
A Vector API (JEP 338) foi introduzida em incubação, fornecendo uma interface para expressar cálculos vetoriais que compilam de maneira eficiente para instruções vetoriais de hardware em tempo de execução:
VectorSpecies SPECIES = IntVector.SPECIES_256;
IntVector v1 = IntVector.fromArray(SPECIES, a, 0);
IntVector v2 = IntVector.fromArray(SPECIES, b, 0);
IntVector v3 = v1.add(v2);
v3.intoArray(c, 0);
6. Foreign-Memory Access API (Third Incubator)
A Foreign-Memory Access API, introduzida nas versões anteriores, continua em incubação no Java 16 (JEP 393). Esta API permite acesso seguro e eficiente à memória fora do heap gerenciado pela JVM.
7. Unix-Domain Socket Channels
Java 16 introduz suporte para canais de socket de domínio Unix (JEP 380), permitindo a comunicação entre processos na mesma máquina através de sockets de domínio Unix:
UnixDomainSocketAddress address = UnixDomainSocketAddress.of(Paths.get("/tmp/socket"));
try (SocketChannel sc = SocketChannel.open(address)) {
// use the socket channel
}
8. Warnings for Value-Based Classes
O Java 16 adiciona warnings para o uso impróprio de classes baseadas em valores (JEP 390), preparando o caminho para a futura imutabilidade dessas classes.
9. Packaging Tool
A ferramenta de empacotamento (JEP 392) foi finalizada, permitindo que os desenvolvedores empacotem suas aplicações Java em formatos específicos de plataforma, como MSI e DMG:
jpackage --input input-dir --name MyApp --main-jar myapp.jar
Conclusão
Java 16 continua a evolução incremental da linguagem, introduzindo funcionalidades que simplificam o desenvolvimento e melhoram a performance das aplicações. Com Records e Pattern Matching finalizados, avanços nas Sealed Classes, novas APIs de ligação e memória estrangeira, suporte a cálculos vetoriais e canais de socket de domínio Unix, Java 16 oferece ferramentas poderosas para desenvolvedores, permitindo um desenvolvimento mais ágil e eficiente.
A adoção dessas evoluções permite que desenvolvedores se concentrem mais na lógica de negócios e menos nos detalhes de baixo nível da linguagem. Java mantém sua relevância e robustez, continuando a se adaptar às necessidades do desenvolvimento moderno de software.
Java 16 é uma atualização essencial para desenvolvedores que desejam aproveitar as últimas ferramentas e técnicas de programação, proporcionando um ambiente de desenvolvimento mais ágil e produtivo.
Share this content: