On Fri, 28 Jan 2022 01:06:47 GMT, liach <d...@openjdk.java.net> wrote:

>> Commited the change on df78e05e3e692e2189c9d318fbd4892a4b96a55f
>
> Will we gradually phase out the `Random` class? If yes, we should put this 
> conversion method in `Random` so that we don't break the newer API shall 
> `Random` be retired.

I don't think Random will ever be removed, so this probably isn't an issue.

There is the overall question of which factoring is preferable: adding a 
default method on RandomGenerator, as is done here, or an alternative of adding 
a static utility to Random, something like:

    // Random.java
    public static Random from(RandomGenerator generator) { ... }

This makes the call site a bit longer and adds a level of nesting:

    Collections.shuffle(list, 
Random.from(RandomGenerator.of("L64X128MixRandom")));

compared to the default method approach:

    Collections.shuffle(list, 
RandomGenerator.of("L64X128MixRandom").asRandom()); 

I believe this allows the wrapper class to be placed in java.util, or even as a 
nested class of Random, instead of having to be a new top-level class in 
jdk.internal.

Another consideration is whether the adapter should be on the "new" thing or on 
the "old" thing. There's a little bit of precedent to put adapters on the "old" 
thing so that the "new" thing doesn't get polluted with the old. For example, 
consider Enumeration::asIterator. (Even though the adaptation is going the 
other way in that case, there are still alternative factorings that place the 
adapter on the new instead of the old.)

I don't think any of this is compelling but it's worth a discussion.

Regardless of where the adapter ends up, the "other" class should have a note 
and a link that refers to the adapter.

-------------

PR: https://git.openjdk.java.net/jdk/pull/7001

Reply via email to