gpt4 book ai didi

java - 通过数字 id 获取枚举的最佳方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:40:52 27 4
gpt4 key购买 nike

我需要创建一个包含大约 300 个值的枚举,并能够通过 id (int) 获取其值。我目前有这个:

public enum Country {
DE(1), US(2), UK(3);

private int id;
private static Map<Integer, Country> idToCountry = new HashMap<>();
static {
for (Country c : Country.values()) {
idToCountry.put(c.id, c);
}
}

Country(int id) {
this.id = id;
}

public static Country getById(int id) {
return idToCountry.get(id);
}
}

该枚举将被大量使用,所以我想知道这是否是性能方面的最佳解决方案。

我读过 http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html翻来覆去,找不到描述什么时间的部分

static {

}

block 被调用,如果保证这只会被调用一次。所以 - 是吗?

最佳答案

如果第一个国家/地区 ID 是 0 并且 ID 递增 1,您可以使用下一个方法:

  1. 在数组中缓存枚举值。 Enum.values() 返回元素的顺序与它们在枚举中声明的顺序相同。但它应该被缓存,因为它每次被调用时都会创建新数组。
  2. 通过 id 从缓存数组中获取值,这将是数组索引。

请看下面的代码:

enum Country {
A, B, C, D, E;
private static final Country[] values = Country.values();

public static Country getById(int id) {
return values[id];
}
}

更新:要获取国家/地区的 ID,应使用 ordinal() 方法。为了让获取id代码更清晰,可以将下一个方法添加到枚举中:

public int getId() {
return ordinal();
}

关于java - 通过数字 id 获取枚举的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41482009/

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