2012-07-30 11 views
8

he escrito el siguiente métodopasan enumeración de tipo genérico como parámetro (Java)

@SuppressWarnings("unchecked") 
protected <E extends Enum<E>> void populateComboWithEnumValues(Combo combo, E enumData, String defaultSelectionValue) { 

    // populate commbo 
    for (Enum<E> enumVal: enumData.getClass().getEnumConstants()) { 
     combo.add(enumVal.toString()); 
    } 

    // select default selection 
    for (Enum<E> 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"); 
      } 
     } 
    } 

¿Cómo puedo pasar diferentes tipos de enumeración al segundo argumento? Sé que no podría crear una instancia de una enumeración, pero inicializar una enumeración significa que voy a pasar un valor único no la enumeración inicializada entera de la siguiente manera ... Otras enumeraciones también se pasarían al mismo método para las especificaciones Combo

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; 
    } 
} 

Respuesta

40

Es posible que desee pasar la clase, y no una instancia de enumeración:

protected <E extends Enum<E>> void populateComboWithEnumValues(Combo combo, Class<E> enumClass, String defaultSelectionValue) {...} 

Aquí tienes un ejemplo de uso:

public class EnumTest { 

    protected static <E extends Enum<E>> void enumValues(Class<E> enumData) { 
     for (Enum<E> enumVal: enumData.getEnumConstants()) { 
      System.out.println(enumVal.toString()); 
     } 
    } 

    public static enum TestEnum { 
     ONE, TWO, THREE; 
    } 

    public static void main(String param []) { 
     EnumTest.enumValues(EnumTest.TestEnum.class); 
    } 
} 
Cuestiones relacionadas