Re: Random Enum
markspace wrote:
Lew wrote:
public class RandomEnum // untested, not even compiled yet
{
private static final Random rand = new Random();
public static <E extends Enum<E>> E random( Class <E> clazz )
{
E [] values = clazz.getEnumConstants();
return values [rand.nextInt( values.length )];
}
}
This is what I would have suggested. It's pretty simple really. You
could define a similar method that takes an enum rather than a class and
returns a random value, it's just as easy to call getDeclaringClass() on
an enum and use this one method.
package randomenum;
import java.lang.annotation.ElementType;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class RandomEnum
{
public static void main( String[] args )
{
System.out.println( "Random TimeUnit: " +
randomEnum( TimeUnit.SECONDS ) );
System.out.println( "Random ElementType: " +
randomEnum( ElementType.FIELD ) );
}
static Enum<?> randomEnum( Enum<?> e )
// or you could overload random( Enum<?> e )
{
return random( e.getDeclaringClass() );
}
And couldn't you make this generic, too? (I haven't tried it yet.)
public static <E extends Enum<E>> E random( Enum <E> e )
{
return random( e.getDeclaringClass() );
}
private static final Random rand = new Random();
public static <E extends Enum <E>> E random( Class <E> clazz )
{
E [] values = clazz.getEnumConstants();
return values [rand.nextInt( values.length )];
}
}
OUTPUT:
run:
Random TimeUnit: MICROSECONDS
Random ElementType: LOCAL_VARIABLE
BUILD SUCCESSFUL (total time: 2 seconds)
--
Lew