如果你使用一个EnumSet存储传统的二进制值(1,2,4等),那么当少于64个项目时,我会认为这是存储为位向量并且有效地表示为long.有没有一种简单的方法来获得这个长期的价值.我想要一种快速简单的方法将集合的内容存储在文件或数据库中.
如果我以旧的方式做这件事,我只是用了很长时间,尽管有类型安全等所有问题,我还是会自己动手.
我不认为这可以通用的方式完成.转换为long很容易:
public static <T extends Enum<T>> long enumSetToLong(EnumSet<T> set)
{
long r = 0;
for(T value : set)
{
r |= 1L << value.ordinal();
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
我不知道你怎么可能从一个长回到一般的EnumSet.我知道没有办法(缺少反射)来获取枚举的values数组来进行查找.你必须以每个枚举为基础.
我认为序列化是要走的路.只需将序列化作为长整数就会更容易受到版本错误或由重新排列枚举中的常量引起的错误的影响.