(java)如果enum是静态的 - 如何在我的代码中创建另一个实例(使用DB40)?

Bic*_*ick 0 java enums db4o

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

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

你可以看到一个卖= 9570而另一个是9576

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

我怎么能避免呢?
谢谢.

Pet*_*rey 5

你可以获得多个实例

  • 你有多个类加载器.
  • Unsafe用来创建Enum类的实例.

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

顺便说一句:我会使用买入和卖出,而不是买入和卖出枚举常量.

  • 他的意思是枚举值应该大写(买入,卖出而不是买入,卖出). (3认同)