title: Android enum: set enum programatically from integer value
body: <p>I want to serialized/deserialize a java enum as an int.  I'm using the Android Wear Wearable Data Layer API to transport an enum setting between Wear and Phone devices.  This means I need to convert my enum to an int and back to an enum programatically.  Note that I do NOT need to create new enums, only match an existing one.  My concern is that although I can easily set a value using an enum method, it seems that I could easily set a non-existing value.</p>
  
  <pre><code>public enum Color {
      Undefined (0), Red(1), Yellow(2), Blue(3), Green(4), Black(5);
      private int mValue;
      private Color(int value) { this.mValue = value;} // Constructor
      public int id(){return mValue;}                  // Return enum index
      public void setValue(int i){mValue = i;};        // Set index
  }
  </code></pre>
  
  <p>Thus, I can do the following:</p>
  
  <pre><code>Color color = Color.Red;
  int   index = color.id();
  putDataMapReq.getDataMap().putInt("color",index);          
  </code></pre>
  
  <p>This value can be transported as an int, and I would like to reconstitute it as follows but I can't get the setValue() method to be accessible:</p>
  
  <pre><code>int newindex = dataMap.getInt ("color");
  Color newColor = Color.Undefined;
  newColor.setValue(newIndex);
  </code></pre>
  
  <p>What is this the right way to do this?  Is there a way to validate that the new index value is legitimate?</p>