AnyGene implements Gene<A, AnyGene<A>> { @Override public AnyGene<A> newInstance() { return new AnyGene<>(_supplier.get(), _supplier, _validator); } private  AnyGene(
		final A allele,
		final Supplier<? extends A> supplier,
		final Predicate<? super A> validator
	); @Override A allele(); @Override AnyGene<A> newInstance(); @Override AnyGene<A> newInstance(final A value); @Override boolean isValid(); @Override int hashCode(); @Override boolean equals(final Object obj); @Override String toString(); static AnyGene<A> of(
		final A allele,
		final Supplier<? extends A> supplier,
		final Predicate<? super A> validator
	); static AnyGene<A> of(
		final A allele,
		final Supplier<? extends A> supplier
	); static AnyGene<A> of(final Supplier<? extends A> supplier); static AnyGene<A> of(
		final Supplier<? extends A> supplier,
		final Predicate<? super A> validator
	);  }
@Test public void newInstance() { final Random random = new ContinuousRandom(0); final AnyGene<Integer> gene = AnyGene.of(random::nextInt); for (int i = 0; i < 100; ++i) { final AnyGene<Integer> g = gene.newInstance(); Assert.assertEquals(g.allele().intValue(), i + 1); } }