如何在Java中打印所有枚举值?
我知道在enum中可以获得这些信息如何在Java中打印所有枚举值?,java,enums,Java,Enums,我知道在enum中可以获得这些信息 如何打印所有枚举值,如:print.generalInformation 这将产生: 名称 教育 电子邮件 电话 如何在另一个函数中将枚举一般信息作为参数传递 首先,我将重构枚举以在构造函数参数中传递字符串表示。代码在底部 现在,要打印所有枚举值,只需使用以下命令: enum generalInformation { NAME { @Override public String toString() {
print.generalInformation
教育
电子邮件
电话
一般信息作为参数传递李>
首先,我将重构枚举以在构造函数参数中传递字符串表示。代码在底部
现在,要打印所有枚举值,只需使用以下命令:
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";
}
}
}
使用EnumSet
的替代方法是使用GeneralInformation.values()
,但这意味着每次调用它时都必须创建一个新数组,这对我来说是浪费。诚然,调用EnumSet.allOf
每次也需要一个新对象。。。如果您经常这样做,并且关心性能,那么您可以随时将其缓存到某个位置
当涉及到参数时,您可以像使用任何其他类型一样使用GeneralInformation
:
// Note: enum name changed to comply with Java naming conventions
for (GeneralInformation info : EnumSet.allOf(GeneralInformation.class)) {
System.out.println(info);
}
使用值调用,例如
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;
}
}
你的第二部分。。。与应用程序中的接口
或类
一样,将数据与表示分离是一种很好的做法。它允许数据在不同的用户界面中使用,它使数据对象更加轻量级,并且它允许将来的应用
记住这一点,最好避免将显示名称与枚举常量强耦合。幸运的是,有一个类使这变得简单:EnumMap
System.out.println(java.util.Arrays.asList(generalInformation.values()));
公共类应用程序i{
私人最终地图名称;
公共应用程序i(){
名称=新的EnumMap(GeneralInformation.class);
NAME.put(GeneralInformation.NAME,“NAME”);
名称.put(一般信息.教育,“教育”);
name.put(GeneralInformation.EMAIL,“EMAIL”);
名称。put(一般信息。专业,“专业”);
name.put(GeneralInformation.PHONE,“PHONE”);
assert names.keySet().containsAll(
EnumSet.allOf(GeneralInformation.class)):
“忘记添加一个或多个通用信息名称”;
}
公共字符串getNameFor(通用信息信息信息){
返回名称。获取(信息);
}
}
由于Java 8我建议以下解决方案:
public class ApplicationUI {
private final Map<GeneralInformation, String> names;
public ApplicationUI() {
names = new EnumMap<>(GeneralInformation.class);
names.put(GeneralInformation.NAME, "Name");
names.put(GeneralInformation.EDUCATION, "Education");
names.put(GeneralInformation.EMAIL, "Email");
names.put(GeneralInformation.PROFESSION, "Profession");
names.put(GeneralInformation.PHONE, "Phone");
assert names.keySet().containsAll(
EnumSet.allOf(GeneralInformation.class)) :
"Forgot to add one or more GeneralInformation names";
}
public String getNameFor(GeneralInformation info) {
return names.get(info);
}
}
如果您仍然使用Java 1.7,这就是我的工作原理:
public static String printAll() {
return Stream.of(GeneralInformation.values()).
map(GeneralInformation::name).
collect(Collectors.joining(", "));
}
枚举上的values()返回一个数组。因此,可以简单地执行以下操作:
System.out.println(Arrays.toString(generalInformation.values()) 您不必在每个枚举元素中重写toString
方法。每个枚举都有方法name(),该方法返回调用此方法的元素的字符串表示形式:SomeEnum.VALUE.name()
将返回“VALUE”字符串。您可以返回name().charAt(0)+name().substring(1).toLowerCase()在maintoString()
中的code>与此处类似。在该函数中,如何将generaliformation
作为参数传递?
String genInfoValues = "";
boolean firstRun = true;
for (generalInformation info : generalInformation.values()){
if (firstRun) {
firstRun = false;
genInfoValues += info.name();
} else {
genInfoValues += ", " + info.name();
}
}