Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用int映射枚举的最佳方法_Java_Playframework_Persistence - Fatal编程技术网

Java 使用int映射枚举的最佳方法

Java 使用int映射枚举的最佳方法,java,playframework,persistence,Java,Playframework,Persistence,我有点进退两难,如果我将实体图的字段设置为: @ManyToMany Map<SomeEnum, Integer> field; 我不确定我的回答是否真的有用,因为在我看来,您所需要的数据结构的选择实际上取决于您将使用信息做什么。但是,由于您没有提供,我将推断出一些情况(可能是错误的…)。如果你提供更多信息,我会更新我的答案 由于您似乎希望从enum映射到int,因此首先要使用更自然的数据结构,即 Map<SomeEnum, Integer> field; Map字段

我有点进退两难,如果我将实体图的字段设置为:

@ManyToMany
Map<SomeEnum, Integer> field;

我不确定我的回答是否真的有用,因为在我看来,您所需要的数据结构的选择实际上取决于您将使用信息做什么。但是,由于您没有提供,我将推断出一些情况(可能是错误的…)。如果你提供更多信息,我会更新我的答案

由于您似乎希望从
enum
映射到
int
,因此首先要使用更自然的数据结构,即

Map<SomeEnum, Integer> field;
Map字段;
因为这很好地定义了映射。您将获得更好的查找时间和数据结构,用于将键(在本例中为
SomeEnum
)链接到值(整数)

对于
列表
集合
,您使用的数据结构自然不适合查找
SomeEnum的某个实例映射到的值。您必须为您的
包装类编写自己的
比较器
比较器
,并编写更多的代码,如果您使用
映射字段
,这些代码将已经为您的


…除非有特定的原因,你需要一种不同的编码方式?一些限制因素阻止了您使用这种方法?

您使用这种映射的目的是什么?枚举类型实例有一个
ordinal()
方法来获取它的int值,该值在同一个枚举类型中是唯一的。即使您需要为枚举指定一个特定的值(而不是ordinal!),对我来说,最简单的解决方案似乎是在枚举中添加一个整数字段<代码>枚举测试{int-val;FOO(5),BAR(10);公共测试(int-val){this.val=val}}
@Entity
class WrapperClass {

  @Basic(optional=false)
  @Enumerated(EnumType.STRING)
  public SomeEnum someEnum;

  public int value;
}
Map<SomeEnum, Integer> field;