0

在我的代码中,我有以下枚举

public ennum BuySell {
  buy('B', true, RoundingMode.DOWN, 1),
  sell('S', false, RoundingMode.UP, -1 buy);


  BuySell(char c, boolean isBuy, RoundingMode roundingMode, int mult) {
     this.aChar = c;
     this.isBuy = isBuy;
     this.isSell = !isBuy;
     this.roundingMode = roundingMode;
     this.mult = mult;
  }

  BuySell(char c, boolean isBuy, RoundingMode roundingMode, int mult, BuySell   oppositeAction) {
     this(c, isBuy, roundingMode, mult);

     this.opposite = oppositeAction;
     oppositeAction.opposite = this;
  }
}

我通过 DB40 保存包含此枚举的对象,并在我的系统加载时加载这些对象。我看到的是加载的对象包含具有不同对象 id 的 ButSell 。
干得好 :

在此处输入图像描述

您可以看到一个卖出 = 9570,另一个是 9576

我的问题是 - 这个枚举的另一个实例是如何创建的?不是静态的吗?

我怎样才能避免它?
谢谢。

4

3 回答 3

5

如果你可以获得多个实例

  • 您有多个类加载器。
  • 您用于Unsafe创建 Enum 类的实例。

需要进一步调查以确定如何避免这种情况。例如,您是否设置了类加载器。两个对象的 ClassLoader 是否不同?该库是否使用 Unsafe.allocateInstance ?

顺便说一句:我会使用 BUY 和 SELL 而不是买卖枚举常量。

于 2012-08-10T08:43:31.417 回答
0

我会使用工厂,并且在 setBuySell 中的对象中通过工厂。我不知道 DB40,所以这是一个疯狂的猜测

于 2012-08-10T09:02:26.713 回答
0

您现在有两个枚举实例:buysell. 它们是静态的。不是你的BuySell类型。

于 2012-08-10T08:51:56.253 回答