Security Средний

Использование интерфейса RandomGenerator для выбора алгоритмов генерации случайных чисел по имени без привязки к конкретному классу.

✕ 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();
Заметили проблему в этом коде? Сообщите нам.
🔧

Независимость от алгоритма

Выбор лучшего алгоритма RNG по имени без изменения структуры кода.

Лучшие алгоритмы

Доступ к современным генераторам LXM с превосходными статистическими свойствами.

🔗

Единый API

Один интерфейс охватывает Random, ThreadLocalRandom, SplittableRandom и другие.

Старый подход
new Random() / ThreadLocalRandom
Современный подход
Фабрика RandomGenerator
Начиная с JDK
17
Сложность
Средний
Интерфейс RandomGenerator
Доступно

Доступно с JDK 17 (сентябрь 2021, JEP 356).

JDK 17 представил RandomGenerator как общий интерфейс для всех реализаций RNG. Вместо жёсткой привязки к new Random() или ThreadLocalRandom можно выбирать алгоритмы по имени через фабрику, что упрощает переключение между алгоритмами, оптимизированными для разных сценариев (скорость, статистическое качество, делимость).