相关疑难解决方法(0)

方便地在enum和int/String之间映射

当使用只能获取有限数量值的变量/参数时,我会尝试始终使用Java enum,如

public enum BonusType {
  MONTHLY, YEARLY, ONE_OFF
}
Run Code Online (Sandbox Code Playgroud)

只要我留在我的代码中,就可以了.但是,我经常需要与其他使用普通int(或String)值的代码进行交互以达到相同的目的,或者我需要从/向数据库读取/写入数据,其中数据存储为数字或字符串.

在这种情况下,我想有一个方便的方法将每个枚举值与一个整数相关联,这样我就可以双向转换(换句话说,我需要一个"可逆的枚举").

从枚举到int很容易:

public enum BonusType {
  public final int id;

  BonusType(int id) {
    this.id = id;
  }
  MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Run Code Online (Sandbox Code Playgroud)

然后我可以访问int值BonusType x = MONTHLY; int id = x.id;.

但是,我没有看到反向的好方法,即从int到enum.理想情况下,像

BonusType bt = BonusType.getById(2); 
Run Code Online (Sandbox Code Playgroud)

我能想出的唯一解决方案是:

  • 将查找方法放入枚举中,BonusType.values()用于填充映射"int - > enum",然后缓存并将其用于查找.会工作,但我必须将这个方法完全复制到我使用的每个枚举中:-(.
  • 将查找方法放入静态实用程序类中.然后我只需要一个"查找"方法,但我必须摆弄反射才能让它适用于任意枚举.

对于这样一个简单的(?)问题,这两种方法看起来都非常尴尬.

还有其他想法/见解吗?

java enums coding-style

107
推荐指数
5
解决办法
12万
查看次数

Java密钥 - 密钥映射

我需要一种可以在两个方向上访问的地图,因此使用键 - 键结构而不是键值.这是否存在于Java中?如果没有,创建它的最佳方法是什么?

例如:

mySpecialHashMap.put("key1", "key2");

mySpecialMap.getL2R("key1") returns "key2";
mySpecialMap.getR2L("key2") returns "key1";
Run Code Online (Sandbox Code Playgroud)

java hashmap map bidirectional

6
推荐指数
1
解决办法
3394
查看次数

标签 统计

java ×2

bidirectional ×1

coding-style ×1

enums ×1

hashmap ×1

map ×1