我试图写一个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
任何指针在哪里我做错了这个?关于如何实现这个功能有什么建议吗?
感谢,
新手
因为你的print方法不依赖于一个具体枚举实例,所以它应该基于一个具体枚举类,而不是这个类的实例
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);
不是这样的,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);
}
}
Migrate
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();