Here's a surprisingly simple yet occasionally useful implementation of an "incrementing" enumeration.
public enum WhichArgument
{
unknown, first, second, third, fourth;
public WhichArgument next()
{
return values()[ ordinal() + 1 ];
}
}
And what we might use it for...
import static java.util.Objects.isNull;
import org.slf4j.Logger;
public class Utilities
{
private static Logger logger = LoggerFactory.getLogger( Utilities.class );
private static void validateCodedDataArguments( final String ... arguments )
{
WhichArgument which = unknown;
for( String argument : arguments )
{
which = which.next();
if( isNull( argument ) )
{
logger.warn( "Null argument passed; culprit: " + which.name() );
Thread.dumpStack();
}
}
}
}
Testing this feature's behavior:
@Test
public void testIncrementingEnumeration()
{
WhichArgument which = WhichArgument.unknown;
for( int x = 0; x < 10; x++ )
{
which = which.next();
System.out.println( " " + which.name() );
}
}
...and the output:
first
second
third
fourth
java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at com.windofkeltia.enums.TestEnums$WhichArgument.next(TestEnums.java:31)
at com.windofkeltia.enums.TestEnums.testIncrementingEnumeration(TestEnums.java:42) <26 internal calls>