001package beginner;
002
003import com.sandwich.koan.Koan;
004
005import static com.sandwich.koan.constant.KoanConstants.__;
006import static com.sandwich.util.Assert.assertEquals;
007
008public class AboutVarArgs {
009
010    class ExampleClass {
011        public boolean canBeTreatedAsArray(Integer... arguments) {
012            return arguments instanceof Integer[];
013        }
014
015        public int getLength(Integer... arguments) {
016            return arguments.length;
017        }
018
019        public String verboseLength(String prefix, Object... arguments) {
020            return prefix + arguments.length;
021        }
022
023        // *******
024        // The following methods won't compile because Java only permits varargs as last argument
025        // *******
026        // public String invalidMethodDeclaration(String... arguments, String... otherArguments) { return ""; }
027        // public String otherInvalidMethodDeclaration(String... arguments, String otherArgument) { return ""; }
028    }
029
030    @Koan
031    public void varArgsCanBeTreatedAsArrays() {
032        assertEquals(new ExampleClass().canBeTreatedAsArray(1, 2, 3), __);
033    }
034
035    @Koan
036    public void youCanPassInAsManyArgumentsAsYouLike() {
037        assertEquals(new ExampleClass().getLength(1, 2, 3), __);
038        assertEquals(new ExampleClass().getLength(1, 2, 3, 4, 5, 6, 7, 8), __);
039    }
040
041    @Koan
042    public void youCanPassInZeroArgumentsIfYouLike() {
043        assertEquals(new ExampleClass().getLength(), __);
044    }
045
046    @Koan
047    public void youCanHaveOtherTypesInTheMethodSignature() {
048        assertEquals(new ExampleClass().verboseLength("This is how many items were passed in: ", 1, 2, 3, 4), __); 
049    }
050}