【发布时间】:2015-08-13 09:55:44
【问题描述】:
以前是
public static final Map<BigInteger, String> CONTRACT_STATUS_LIST = new HashMap<BigInteger, String>()
改变后
public static final Map<BigInteger, String> CONTRACT_STATUS_LIST = new HashMap<BigInteger, String>(){{
put(Constants.STATUS_CANCELLED, "Cancelled");
put(Constants.STATUS_TERMINATED, "Terminated");
}};
收到错误消息:
Class definition changed (and this is unsupported)
Added elements: public static final java.util.Map com.Constants.CONTRACT_STATUS_LIST
Removed elements: public static final java.util.HashMap com.Constants.CONTRACT_STATUS_LIST
java.lang.RuntimeException: java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields)
【问题讨论】:
-
Offtopic:您不想将
BigInteger用于任何类型的枚举键。这些对象是巨大的,当你想要的只是在你的常量类中的十几个甚至一千个键实例中唯一的值时。更喜欢int/Integer或枚举或类似的东西。 -
@hiergiltdiestfu:实际上,正如你所说的那样,这个场景在十几个甚至上千个对象中是独一无二的。所以我更喜欢使用 BigInteger 而不是 Integer/int。这个问题有解决办法吗跨度>
-
为什么?你有可能超过 2E32 个元素吗?
-
@hiergiltdiestfu:public static final BigInteger STATUS_CANCELLED = BigInteger.valueOf(9134254847713154879L);公共静态最终 BigInteger STATUS_TERMINATED = BigInteger.valueOf(9134254847713154885L); id是这样的
-
这些高数字是从外部强加给您的吗?在任何情况下,这些仍然适合
long/Long(最高约 +9,223*10^18)。我只是想强调BigInteger大约有 10 个整数那么重,并且经常用于不需要的地方。