/* * [Breed.java] * * Summary: example use of enum define the possible dog breeds. * * Copyright: (c) 2009-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2009-01-01 initial version */ package com.mindprod.example; import static java.lang.System.*; // Following is how you could import this enum in other classes // with an import to allow dropping the explicit Breed. // import static com.mindprod.dogs.Breed.*; /** * example use of enum define the possible dog breeds. * <p/> * This automatically creates three Breed objects to represent the three breeds. All Breed variables will be either null * or point to one of these three objects. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2009-01-01 initial version * @since 2009-01-01 */ @SuppressWarnings( { "UnusedAssignment", "UnusedDeclaration", "WeakerAccess" } ) public enum Breed { /** * Dachshund, smooth and shaggy */ DACHSHUND, /** * Dalmatian */ DALMATIAN, /** * Labrador, black and golden */ LABRADOR; /** * constructor, implicitly public */ Breed() { } // I could have used lower case enum constant names // e.g. dalmatian, or mixed case, e.g. Dalmatian // but since enums are actually constants, // Java convention says they should be all caps. // Traditionally you order them alphabetically. // Eclipse does that when you reorder methods. /** * is this a lap dog? * * @param breed breed of dog * * @return true if it is a lap dog */ public static boolean lap( Breed breed ) { // Example use of an enum in a switch switch ( breed ) { // Note how you do not specify Breed.DALMATIAN in the case label. // Java knows all case labels are Breed., because breed is a Breed. case DALMATIAN: case LABRADOR: default: return false; case DACHSHUND: return true; } } /** * Breed Test harness * * @param args not used */ @SuppressWarnings( { "UnusedParameters" } ) public static void main( String[] args ) { // assignment Breed cedar = Breed.LABRADOR; // prints "LABRADOR"; out.println( cedar ); // Prints 2. DACHSHUND is 0. ordinals are 0-based as you would expect. out.println( cedar.ordinal() ); // prints "DACHSHUND"; out.println( Breed.DACHSHUND ); // comparison if ( cedar.compareTo( Breed.DALMATIAN ) > 0 ) { // should print this: out.println( "LABRADOR comes after DALMATIAN" ); } else { out.println( "DALMATIAN comes after LABRADOR" ); } // set to none of the above cedar = null; // converting from String to enum, peculiar but slick // saves reams of ifs or hashMap lookups. // The compiler magically generates this method for you. // You will not find item is the base Enum class. // Works for any String matching one of the breeds. // If there is no match for the String, valueOf will throw an // IllegalArgumentException. Breed myDogsBreed = Breed.valueOf( "Dachshund".toUpperCase() ); out.println( myDogsBreed ); // converting int to enum // breed 1 is Dalmatian. int i = 1; Breed theBreed = Breed.values()[ i ]; out.println( theBreed ); // Example iterating over all possibilities. // Print out a list of all possible breeds. out.println( "All possible breeds" ); for ( Breed breed : Breed.values() ) { out.println( breed ); } // you might thin you could say for ( Breed breed : Breed ) but you cannot; You need Breed.values() // end main } }