Interfejs RandomGenerator
Używaj interfejsu RandomGenerator do wyboru algorytmów losowych po nazwie bez wiązania się z konkretną klasą.
Porównanie kodu
✕ 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();
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Niezależny od algorytmu
Wybierz najlepszy algorytm RNG po nazwie bez zmiany struktury kodu.
Lepsze algorytmy
Dostęp do nowoczesnych generatorów LXM z lepszymi właściwościami statystycznymi.
Ujednolicone API
Jeden interfejs obejmuje Random, ThreadLocalRandom, SplittableRandom i więcej.
Stare podejście
new Random() / ThreadLocalRandom
Nowoczesne podejście
Fabryka RandomGenerator
Od JDK
17
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Interfejs RandomGenerator
Dostępne
Dostępne od JDK 17 (wrzesień 2021, JEP 356)
Jak to działa
JDK 17 wprowadził RandomGenerator jako wspólny interfejs dla wszystkich implementacji RNG. Zamiast na stałe kodować new Random() lub ThreadLocalRandom, możesz wybierać algorytmy po nazwie przez fabrykę, ułatwiając zamianę algorytmów zoptymalizowanych do różnych zastosowań (szybkość, jakość statystyczna, rozszczepialność).
Powiązana dokumentacja
Dowód