Java 枚举类型 - 自打印枚举

发布于 2024-11-03 07:25:36 字数 734 浏览 1 评论 0原文

我正在尝试编写一个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”参数对象没有 value() 方法。

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

Option1
Option2
Option3
...
OptionN

任何关于我在哪里出错的指示吗?关于如何实现此功能有什么建议吗?

非常感谢,

Noob

I'm trying to write a java function that takes as a parameter an enum type (part of a console based menuing system). This function will then print all of the string representations in the enum.

The enum looks like this:

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

My display function looks like this

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

My problem: Apparently I must not be doing this correctly. The "menu" parameter object doesn't have a values() method in this scenario.

The desired outcome would be the displayMenu() function having an output of:

Option1
Option2
Option3
...
OptionN

Any pointers on where I'm going wrong with this? Any tips on how to implement this functionality?

Much obliged,

Noob

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

荒芜了季节 2024-11-10 07:25:36

因为您的 print 方法不依赖于 concreate 枚举实例,所以它应该基于 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);

Because your print method is not dependend on a concreate enum instance, it should be based on a concreate enum class, not on an instance of this class

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);
意中人 2024-11-10 07:25:36

它并不完全那样工作,枚举条目不知道其他条目。您必须查阅包含的类:

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

It doesn't quite work that way, an Enum entry doesn't know about the other entries. You have to consult the containing class:

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

Here's a Generic version of the method:

public static <K extends Enum<K>> void displayEnumValues(final K enumItem) {
    for (final Enum<K> current : enumItem.getClass().getEnumConstants()) {
        System.out.println(current);
    }
}
多彩岁月 2024-11-10 07:25:36

迁移

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();

Migrate

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

to

 public void displayMenu(main menu) {
     // Get values from enum type
     main[] menuOps = menu.values();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文