Java枚举类型 - 自打印枚举

时间:2011-04-27 08:56:15

标签: java enums

我正在尝试编写一个java函数,它将枚举类型作为参数(基于控制台的菜单系统的一部分)。然后,此函数将打印枚举中的所有字符串表示。

枚举看起来像这样:

protected enum main{
    Option1,
    Option2,
    Option3,
    ...
    OptionN,
}

我的显示功能如下所示

public void displayMenu(Enum menu) {
     // Get values from enum type
     Enum menuOps = menu.values();

     // Iterate over values and print
     for(int i =0 ; i < menuOps.length; i++)
            System.out.println( i + menuOps[i].toString() );
}

我的问题:显然我不能这样做。 “menu”参数对象在此方案中没有values()方法。

期望的结果是displayMenu()函数的输出为:

Option1
Option2
Option3
...
OptionN

关于我出错的地方有什么指示?有关如何实现此功能的任何提示?

很有责任,

菜鸟

3 个答案:

答案 0 :(得分:4)

因为你的print方法不依赖于具体的枚举实例,所以它应该基于一个concreate枚举类,而不是基于这个类的实例

public static <T extends Enum<T>> void printEnum(Class<T> enumClass) {
    for (Enum<T> item : enumClass.getEnumConstants()) {
        System.out.println(item.toString());
    }
}
...
printEnum(MainEnum.class);

答案 1 :(得分:3)

这种方式不太合适,Enum条目不知道其他条目。你必须咨询包含类:

for (Enum current : menu.getClass().getEnumConstants()) {
    System.out.println(current);
}

以下是该方法的通用版本:

public static <K extends Enum<K>> void displayEnumValues(final K enumItem) {
    for (final Enum<K> current : enumItem.getClass().getEnumConstants()) {
        System.out.println(current);
    }
}

答案 2 :(得分:1)

迁移

public void displayMenu(Enum menu) {
     // Get values from enum type
     Enum menuOps = menu.values();

 public void displayMenu(main menu) {
     // Get values from enum type
     main[] menuOps = menu.values();