class DefaultRandomFactory implements RandomFactory {

    protected final RandomType randomType;
    protected final Long randomSeed;

    /**
     * @param randomType never null
     * @param randomSeed null if no seed
     */
    public DefaultRandomFactory(RandomType randomType, Long randomSeed) {
        this.randomType = randomType;
        this.randomSeed = randomSeed;
    }

    @Override
    public Random createRandom() {<FILL_FUNCTION_BODY>}

    @Override
    public String toString() {
        return randomType.name() + (randomSeed == null ? "" : " with seed " + randomSeed);
    }

}

        switch (randomType) {
            case JDK:
                return randomSeed == null ? new Random() : new Random(randomSeed);
            case MERSENNE_TWISTER:
                return new RandomAdaptor(randomSeed == null ? new MersenneTwister() : new MersenneTwister(randomSeed));
            case WELL512A:
                return new RandomAdaptor(randomSeed == null ? new Well512a() : new Well512a(randomSeed));
            case WELL1024A:
                return new RandomAdaptor(randomSeed == null ? new Well1024a() : new Well1024a(randomSeed));
            case WELL19937A:
                return new RandomAdaptor(randomSeed == null ? new Well19937a() : new Well19937a(randomSeed));
            case WELL19937C:
                return new RandomAdaptor(randomSeed == null ? new Well19937c() : new Well19937c(randomSeed));
            case WELL44497A:
                return new RandomAdaptor(randomSeed == null ? new Well44497a() : new Well44497a(randomSeed));
            case WELL44497B:
                return new RandomAdaptor(randomSeed == null ? new Well44497b() : new Well44497b(randomSeed));
            default:
                throw new IllegalStateException("The randomType (" + randomType + ") is not implemented.");
        }
    
<no_super_class>