我正在尝试编写一个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
关于我出错的地方有什么指示?有关如何实现此功能的任何提示?
很有责任,
菜鸟
答案 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();