Java 如何使用字符串数组填充枚举友好字符串

Java 如何使用字符串数组填充枚举友好字符串,java,enums,Java,Enums,我编写代码,用友好的字符串名称填充我的枚举,例如游泳时间、徒步旅行时间 public enum SeasonTypeEnum { summer("Swimming Time"), auturm("Hiking Time"), winter("Skiing Time"), spring("Planting Time"); private String friendlyName; private SeasonTypeEnum(String frie

我编写代码,用友好的字符串名称填充我的枚举,例如游泳时间、徒步旅行时间

public enum SeasonTypeEnum {
    summer("Swimming Time"),
    auturm("Hiking Time"),
    winter("Skiing Time"),
    spring("Planting Time");

    private String friendlyName;

    private SeasonTypeEnum(String friendlyName){
        this.friendlyName = friendlyName;
    }

    @Override
    public String toString(){
        return friendlyName;
    }
}
然而,我正在考虑将这些刺存储在一个数组中并从中提取。我如何才能做到这一点?

您可以使用Enum.values()来实现这一点

例如:

SeasonTypeEnum[] vals = SeasonTypeEnum.values();
String[] strs = new String[vals.length];
for (int i = 0; i < vals.length; i++) {
   strs[i] = vals[i].toString();
}

然而,
enum
很可能是最好的解决方案

我写这样一个数组的方法

static final String[] seasons = 
              "Swimming Time,Hiking Time,Skiing Time,Planting Time".split(",");
如果要从枚举中提取,可以这样做

static final SeasonTypeEnum[] VALUES = values();

public static String friendlyNameFor(int id) {
    return VALUES[id].friendlyName;
}

您可以将友好字符串存储在私有静态数组中,并通过添加索引作为条目字段与枚举条目关联:

public enum SeasonTypeEnum {

    private static String seasons = new String[] {"Swimming Time", "Hiking Time", "Skiing Time", "Planting Time"};

    summer(0),
    auturm(1),
    winter(2),
    spring(3);

    private int index;

    private SeasonTypeEnum(int index) {
        this.index = index;
    }

    @Override
    public String toString() {
        return seasons[index];
    }
}

或者只需调用
values()
;除非代码每秒进行数百万次调用,否则通过创建常量数组所获得的性能增益将是微不足道的。@Aarondigula因为您的IDE可以为您执行此重构,所以我会将其写成
value()[id]
,但使用
引入常量
重构。
public enum SeasonTypeEnum {

    private static String seasons = new String[] {"Swimming Time", "Hiking Time", "Skiing Time", "Planting Time"};

    summer(0),
    auturm(1),
    winter(2),
    spring(3);

    private int index;

    private SeasonTypeEnum(int index) {
        this.index = index;
    }

    @Override
    public String toString() {
        return seasons[index];
    }
}