如何在Java中打印所有枚举值?

2022-09-01 16:46:32
enum generalInformation {
    NAME {
        @Override
        public String toString() {
            return "Name";
        }
    },
    EDUCATION {
        @Override
        public String toString() {
            return "Education";
        }
    },
    EMAIL {
        @Override
        public String toString() {
            return "Email";
        }
    },
    PROFESSION {
        @Override
        public String toString() {
            return "Profession";
        }
    },
    PHONE {
        @Override
        public String toString() {
            return "Phone";
        }
    }
}

我有这些信息可以在枚举中提供。

  1. 如何打印所有枚举值,如: ?print.generalInformation

输出:

姓名
教育
电子邮件
电话

  1. 如何将该枚举作为参数传递到另一个函数中?generalInformation

答案 1
System.out.println(java.util.Arrays.asList(generalInformation.values()));

您的第二部分...与 或 a 相同interfaceclass


答案 2

首先,我会重构枚举以传递构造函数参数中的字符串表示形式。该代码位于底部。

现在,要打印所有枚举值,您只需使用如下内容:

// Note: enum name changed to comply with Java naming conventions
for (GeneralInformation info : EnumSet.allOf(GeneralInformation.class)) {
    System.out.println(info);
}

使用的替代方法是使用 ,但这意味着每次调用它时都必须创建一个新数组,这对我来说是浪费。诚然,每次调用也需要一个新对象...如果您经常这样做并且担心性能,则可以随时将其缓存在某个地方。EnumSetGeneralInformation.values()EnumSet.allOf

当涉及到参数时,您可以像使用任何其他类型一样使用:GeneralInformation

public void doSomething(GeneralInformation info) {
    // Whatever
}

使用值调用,例如

doSomething(GeneralInformation.PHONE);

使用构造函数参数重构

public enum GeneralInformation {
    NAME("Name"),
    EDUCATION("Education"),
    EMAIL("Email"),
    PROFESSION("Profession"),
    PHONE("Phone");

    private final String textRepresentation;

    private GeneralInformation(String textRepresentation) {
        this.textRepresentation = textRepresentation;
    }

    @Override public String toString() {
         return textRepresentation;
    }
}

使用您当前的值,您实际上可以自动将名称转换为标题大小写 - 但从长远来看,这并不是很灵活,我认为这个显式版本更简单。