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

1つのインターフェースでRandom、ThreadLocalRandom、SplittableRandomなどを網羅。

旧来のアプローチ
new Random() / ThreadLocalRandom
モダンなアプローチ
RandomGeneratorファクトリー
JDKバージョン
17
難易度
中級
RandomGeneratorインターフェース
利用可能

JDK 17(2021年9月、JEP 356)以降、利用可能

JDK 17ではRandomGeneratorがすべてのRNG実装の共通インターフェースとして導入されました。new Random()やThreadLocalRandomをハードコードする代わりに、ファクトリーを通じてアルゴリズムを名前で選択でき、ユースケース(速度・統計品質・分割可能性)に応じてアルゴリズムを容易に切り替えられます。

共有 𝕏 🦋 in