Feature Java: Scoped Values
O Java 22 trouxe diversas novas funcionalidades, como a Statements before super e Unnamed Variables & Patterns. Entre os recursos mais interessantes está o Scoped Values (Valores com Escopo), que chega em sua segunda prévia nesta versão.
O que são Scoped Values?
Scoped Values, ou Valores com Escopo, são objetos compartilhados de forma segura e eficiente entre threads. É uma variável do tipo ScopedValue
e, normalmente, é declarada como um campo estático final e sua acessibilidade é definida como privada para que não possa ser acessada diretamente por código em outras classes.
Vantagens dos Scoped Values:
Segurança
Os Scoped Values garantem que apenas o código dentro do escopo do valor possa acessá-lo, evitando modificações indesejadas.
Eficiência
O compartilhamento de dados dentro do escopo é mais eficiente do que usar variáveis locais de thread, pois elimina a necessidade de sincronização e cópias redundantes de dados.
Clareza
O uso de Scoped Values torna o código mais claro e fácil de entender, pois explicitamente define o escopo do compartilhamento de dados.
Exemplo de Uso:
Um exemplo de Scoped Value é um framework web, onde o Scoped Value é usado para armazenar o contexto da requisição, permitindo que métodos dentro do escopo da solicitação acessem esse contexto sem a necessidade de passar parâmetros de método.
class Framework {
private final static ScopedValue<FrameworkContext> CONTEXT = ScopedValue.newInstance();
void serve(Request request, Response response) {
var context = createContext(request);
ScopedValue.where(CONTEXT, context).run(() -> Application.handle(request, response));
}
public PersistedObject readKey(String key) {
var context = CONTEXT.get();
var db = getDBConnection(context);
db.readKey(key);
}
...
}
O código fonte do exemplo foi retirado da proposta de aprimoramento do Java 464.
Comparativo entre ThreadLocal
Scoped values e ThreadLocal compartilham a ideia de armazenar dados específicos por thread, mas diferem em alguns pontos chave. ThreadLocals são mutáveis e acessíveis a qualquer momento durante a execução da thread. Já Scoped Values são imutáveis e acessíveis apenas dentro de um escopo específico, definido por um bloco de código. Isso torna Scoped Values mais seguros, pois evita modificações acidentais de dados. Além disso, Scoped Values são geralmente mais eficientes para compartilhamento de dados dentro de um escopo bem definido, já que não necessitam de sincronização.
Conclusão
O Java 22 traz diversas novidades interessantes para os desenvolvedores Java, e os Scoped Values são um dos recursos mais promissores. Com sua capacidade de melhorar a segurança, eficiência e clareza do código, os Scoped Values valem a pena ser explorados.