Interface RandomGenerator
Use a interface RandomGenerator para escolher algoritmos de números aleatórios pelo nome sem acoplamento a uma classe específica.
Comparação de Código
✕ Java 8
// Hard-coded to one algorithm
Random rng = new Random();
int value = rng.nextInt(100);
// Or thread-local, but still locked in
int value = ThreadLocalRandom.current()
.nextInt(100);
✓ Java 17+
// Algorithm-agnostic via factory
var rng = RandomGenerator.of("L64X128MixRandom");
int value = rng.nextInt(100);
// Or get a splittable generator
var rng = RandomGeneratorFactory
.of("L64X128MixRandom").create();
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Agnóstico de algoritmo
Escolha o melhor algoritmo de RNG pelo nome sem alterar a estrutura do código.
Algoritmos melhores
Acesso a geradores LXM modernos com propriedades estatísticas superiores.
API unificada
Uma interface cobre Random, ThreadLocalRandom, SplittableRandom e mais.
Abordagem Antiga
new Random() / ThreadLocalRandom
Abordagem Moderna
Factory RandomGenerator
Desde o JDK
17
Dificuldade
Intermediário
Suporte JDK
Interface RandomGenerator
Disponível
Disponível desde o JDK 17 (setembro de 2021, JEP 356).
Como funciona
O JDK 17 introduziu RandomGenerator como uma interface comum para todas as implementações de RNG. Em vez de fixar new Random() ou ThreadLocalRandom, você pode selecionar algoritmos pelo nome via factory, facilitando a troca entre algoritmos otimizados para diferentes casos de uso (velocidade, qualidade estatística, divisibilidade).
Documentação Relacionada