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が含まれていることがわかります。
どうぞ :

ここに画像の説明を入力してください

1つは9570で、もう1つは9576であることがわかります。

私の疑問は、この列挙型の別のインスタンスはどのように作成されるのですか?静的ではありませんか?

どうすればそれを回避できますか?
ありがとう。

4

3 に答える 3

5

次の場合、複数のインスタンスを取得できます

  • 複数のクラスローダーがあります。
  • UnsafeEnumクラスのインスタンスを作成するために使用します。

これを回避する方法を決定するには、さらに調査が必要です。たとえば、クラスローダーを設定していますか。2つのオブジェクトのClassLoaderは異なりますか?ライブラリはUnsafe.allocateInstanceを使用していますか?

ところで:列挙型定数を売買するのではなく、購入と販売を使用します。

于 2012-08-10T08:43:31.417 に答える
0

これで、列挙型の2つのインスタンスがあります:buysell。そして、それらは静的です。あなたのBuySellタイプではありません。

于 2012-08-10T08:51:56.253 に答える
0

私はファクトリを使用し、setBuySellのオブジェクトでファクトリを通過します。私はDB40を知らないので、それは大げさな推測です

于 2012-08-10T09:02:26.713 に答える