title: pass generic type enum as parameter (java)
body: <p>i have written the following method </p>
  
  <pre><code>@SuppressWarnings("unchecked")
  protected &lt;E extends Enum&lt;E&gt;&gt; void populateComboWithEnumValues(Combo combo, E enumData, String defaultSelectionValue) {
  
      // populate commbo
      for (Enum&lt;E&gt; enumVal: enumData.getClass().getEnumConstants()) {  
          combo.add(enumVal.toString());
      }  
  
      // select default selection
      for (Enum&lt;E&gt; enumVal: enumData.getClass().getEnumConstants()) {  
          if(enumVal.toString().equals(defaultSelectionValue)) {
              try {
                  combo.select((Integer) enumVal.getClass().getMethod("getSelectionIndex").invoke(enumVal));
              } catch (IllegalArgumentException e) {
                  LOGGER.debug("an IllegalArgumentException exception occured");
              } catch (SecurityException e) {
                  LOGGER.debug("an SecurityException exception occured");
              } catch (IllegalAccessException e) {
                  LOGGER.debug("an IllegalAccessException exception occured");
              } catch (InvocationTargetException e) {
                  LOGGER.debug("an InvocationTargetException exception occured");
              } catch (NoSuchMethodException e) {
                  LOGGER.debug("an NoSuchMethodException exception occured");
              }
          }
      } 
  </code></pre>
  
  <p>How can i pass different enum types to the second argument? I know i coulnd't create an instance of an enum, but initialising an enum means i will be passing a single value not the entire initialised enum as follows ... Other enums would also be passed to the same method for Combo specifics</p>
  
  <pre><code>public enum ServerEnvironmentName {
  
      /** 
       * The CFD environment name. 
       * Selection Index
       */
      CFD("CFD", 0),
  
      /** 
       * The PIT environment name. 
       * Selection Index
       */
      PIT("PIT", 1),
  
      /** 
       * The SIT environment name. 
       * Selection Index
       */
      SIT("SIT", 2),
  
      /** 
       * The DEV environment name. 
       * Selection Index
       */
      DEV("DEV", 3);
  
      /** The input string to identify the environment. */
      private String envURL;
  
      /** The index value for view selection.*/
      private int selectionIndex;
  
      /**
       * Enum constructor to initialise default values. 
       * 
       * @param selectionIndex index value for view selection
       * @param envURL input parameter for environment
       */
      ServerEnvironmentName(String envURL, int selectionIndex) {
          this.envURL = envURL;
          this.selectionIndex = selectionIndex;
      }
  
      /**
       * Getter for the envURL.
       * 
       * @return the environment string 
       */
      public String getEnvironmentUrl() {
          return envURL;
      }
  
      /**
       * This method returns the index of the enum value.
       * 
       * @return the selection index
       */
      public int getSelectionIndex() {
          return selectionIndex;
      }
  }
  </code></pre>