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}