gpt4 book ai didi

具有多种值类型的 Java 枚举

转载 作者:IT老高 更新时间:2023-10-28 20:42:06 27 4
gpt4 key购买 nike

基本上我所做的是为州写一个枚举,我不仅希望能够像访问州一样访问它们,而且还希望访问它们的缩写以及它们是否是原始殖民地。

public enum States {
...
MASSACHUSETTS("Massachusetts", "MA", true),
MICHIGAN("Michigan", "MI", false),
...; //so on and so forth for all fifty states

private final Object[] values;

States(Object... vals) {
values = vals;
}

public String FULL() {
return (String) values[0];
}

public String ABBR() {
return (String) values[1];
}

public boolean ORIGINAL_COLONY(){
return (boolean) values[2];
}
}

这似乎按我的预期工作。我可以

System.out.println(States.ALABAMA);                  // Prints "ALABAMA"
System.out.println(States.ALABAMA.FULL()); // Prints "Alabama"
System.out.println(States.ALABAMA.ABBR()); // Prints "AL"
System.out.println(States.ALABAMA.ORIGINAL_COLONY());// Prints "false"

对于这种涉及枚举的特定场景,这是执行此操作的最佳方法还是有更好的方法来设置和格式化此枚举?在此先感谢大家!

最佳答案

首先,枚举方法不应该全部大写。它们是与其他方法一样的方法,具有相同的命名约定。

其次,您所做的并不是设置枚举的最佳方式。您应该为每个值使用单独的变量,而不是使用值数组。然后,您可以像实现任何其他类一样实现构造函数。

根据以上所有建议,您应该这样做:

public enum States {
...
MASSACHUSETTS("Massachusetts", "MA", true),
MICHIGAN ("Michigan", "MI", false),
...; // all 50 of those

private final String full;
private final String abbr;
private final boolean originalColony;

private States(String full, String abbr, boolean originalColony) {
this.full = full;
this.abbr = abbr;
this.originalColony = originalColony;
}

public String getFullName() {
return full;
}

public String getAbbreviatedName() {
return abbr;
}

public boolean isOriginalColony(){
return originalColony;
}
}

关于具有多种值类型的 Java 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com