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 AboutEnums { 009 010 011 enum Colors { 012 Red, Blue, Green, Yellow // what happens if you add a ; here? 013 // What happens if you type Red() instead? 014 } 015 016 @Koan 017 public void basicEnums() { 018 Colors blue = Colors.Blue; 019 assertEquals(blue == Colors.Blue, __); 020 assertEquals(blue == Colors.Red, __); 021 assertEquals(blue instanceof Colors, __); 022 } 023 024 @Koan 025 public void basicEnumsAccess() { 026 Colors[] colorArray = Colors.values(); 027 assertEquals(colorArray[2], __); 028 } 029 030 enum SkatSuits { 031 Clubs(12), Spades(11), Hearts(10), Diamonds(9); 032 033 SkatSuits(int v) { 034 value = v; 035 } 036 037 private int value; 038 } 039 040 @Koan 041 public void enumsWithAttributes() { 042 // value is private but we still can access it. Why? 043 // Try moving the enum outside the AboutEnum class... What do you expect? 044 // What happens? 045 assertEquals(SkatSuits.Clubs.value > SkatSuits.Spades.value, __); 046 } 047 048 enum OpticalMedia { 049 CD(650), DVD(4300), BluRay(50000); 050 051 OpticalMedia(int c) { 052 capacityInMegaBytes = c; 053 } 054 055 int capacityInMegaBytes; 056 057 int getCoolnessFactor() { 058 return (capacityInMegaBytes - 1000) * 10; 059 } 060 } 061 062 @Koan 063 public void enumsWithMethods() { 064 assertEquals(OpticalMedia.CD.getCoolnessFactor(), __); 065 assertEquals(OpticalMedia.BluRay.getCoolnessFactor(), __); 066 } 067}