非常に奇妙な動作をするJava列挙型

ニルスハルデンワン

コードで次の列挙型を定義しました。

public enum Table {
  BASE_PRICES("base_prices", Affinity.UPS,
          Arrays.asList(
                  Field.BILLING_WEIGHT_LOWER_BOUND,
                  Field.BILLING_WEIGHT_UPPER_BOUND,
                  Field.BASE_PRICE,
                  Field.SERVICE_TYPE_ID,
                  Field.ZONE_ID
          )),

  COUNTRY_CODES("country_codes", Affinity.UPS,
          Arrays.asList(Field.COUNTRY_CODE)),

  SERVICE_TYPES("service_types", Affinity.UPS,
          Arrays.asList(Field.SERVICE_TYPE)),

  ZONE_DIVISION("zone_division", Affinity.UPS,
          Arrays.asList(
                  Field.COUNTRY_CODE_ID,
                  Field.SERVICE_TYPE_ID,
                  Field.ZONE_ID,
                  Field.POST_CODE_LOWER_BOUND,
                  Field.POST_CODE_UPPER_BOUND)),

  ZONES("zones", Affinity.UPS,
          Arrays.asList(Field.ZONE_CODE));

  // used to denote the affinity of a table for
  // affinity specific DB cleanup and other stuff.
  public enum Affinity {
    UPS
  }

  private String name;
  private Affinity affinity;
  private List<Field> fields;

  private Table(String name, Affinity affinity, List<Field> fields){
    this.name = name;
    this.affinity = affinity;
    this.fields = fields;
    System.out.println("ENUM CONSTRUCTOR (" + name + "):");
    System.out.println(fields);
    System.out.println();
  }

  public List<Field> getFields(){
    return Collections.unmodifiableList(fields);
  }

}

列挙型を使用して単一のJUnitテストを実行している場合、すべてが正常です。ただし、テストスイート全体を実行すると、以前は単独で機能していた同じテストがnullポインター例外で失敗します。これは、列挙型が正しく初期化されていないため、列挙型コンストラクターのprintlnの出力は次のとおりです。

ENUM CONSTRUCTOR (base_prices):
[BILLING_WEIGHT_LOWER_BOUND, BILLING_WEIGHT_UPPER_BOUND, BASE_PRICE, null, null]

ENUM CONSTRUCTOR (country_codes):
[COUNTRY_CODE]

ENUM CONSTRUCTOR (service_types):
[null]

ENUM CONSTRUCTOR (zone_division):
[null, null, null, null, null]

ENUM CONSTRUCTOR (zones):
[null]

ほとんどのフィールド(フィールドも列挙型です)は、私が理解できない何らかの理由でnullですが、テストスイート全体を実行した場合に限ります。

私は完全に無知です、どんな提案も大歓迎です。

ありがとう!

アンディターナー

私はあなたの間でクラスのロードサイクルを持っていると思うTableField

次の列挙型を検討してください。

enum A {
    X(B.Z),

    A(B b) {
        System.out.println("Constructing " + name() + ": " + b);
    }
}

enum B {
    Z(A.X);

    B(A a) {
        System.out.println("Constructing " + name() + ": " + a);
    }
}

のでA参照しB、ロードがA原因Bロードします。ただし、B参照AAロードされます。ただし、すでにロードされているため、を作成するときに初期化されていないフィールド値(null)が表示されZます。

Ideone demo

このサイクルを特定し(このような長さ2のサイクルではない可能性があり、列挙型クラスが含まれるだけでなく、完全に明白ではない可能性があります。コード内の周期的な依存関係を特定するツールが存在します)、それを中断する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

列挙型クラスの値を比較するときの奇妙な動作

分類Dev

空の文字列を取得するときのAndroidLogcatの非常に奇妙な動作

分類Dev

範囲外の値を持つ列挙型を解析するときの奇妙な動作

分類Dev

列挙型を使用したProtobufの奇妙な動作

分類Dev

非常に大きな画面で奇妙な動作をする同位体応答

分類Dev

列挙型の逆/シリアル化中のこの奇妙な動作の説明を探しています

分類Dev

非常に奇妙な動作をするRでのアタッチ/デタッチ

分類Dev

gcc7の列挙型と3値の奇妙な動作

分類Dev

奇妙な動作をするJava文字列分割関数

分類Dev

TFileStreamは非常に奇妙な動作をします

分類Dev

列挙型を動的に生成する

分類Dev

列挙型属性を動的に追加する

分類Dev

列挙型メソッドをオーバーライドする際の奇妙な動作。getClass()。getInterfaces()は正しく機能していますか?

分類Dev

Pythonで非常に奇妙な動作をする浮動小数点から整数への変換

分類Dev

奇妙な列挙子の動作(副作用?)

分類Dev

Golang列挙型はJavaの列挙型と同じように動作しますか?

分類Dev

JavaとPostgresの列挙型 - どのように私はそれらを更新するために一緒に動作するのですか?

分類Dev

ajaxリクエストで「var」キーワードを使用すると非常に奇妙な動作

分類Dev

sshコマンドでサブシェルの非常に奇妙な動作をBashする

分類Dev

オブジェクトをスケーリングするときの非常に奇妙な動作

分類Dev

HTML5オーディオタグで非常に奇妙な動作をするSafari

分類Dev

returnステートメントの非常に奇妙な動作:Java

分類Dev

PHPでの非常に奇妙な動作

分類Dev

bs4の非常に奇妙な動作

分類Dev

非常に奇妙なUITableViewtableFooterViewの動作

分類Dev

Textareaの非常に奇妙な動作

分類Dev

非常に奇妙なpulseaudioの動作

分類Dev

createobject( "HTMLFILE")での非常に奇妙な動作!

分類Dev

C ++で文字列に文字を挿入する際の奇妙な動作

Related 関連記事

  1. 1

    列挙型クラスの値を比較するときの奇妙な動作

  2. 2

    空の文字列を取得するときのAndroidLogcatの非常に奇妙な動作

  3. 3

    範囲外の値を持つ列挙型を解析するときの奇妙な動作

  4. 4

    列挙型を使用したProtobufの奇妙な動作

  5. 5

    非常に大きな画面で奇妙な動作をする同位体応答

  6. 6

    列挙型の逆/シリアル化中のこの奇妙な動作の説明を探しています

  7. 7

    非常に奇妙な動作をするRでのアタッチ/デタッチ

  8. 8

    gcc7の列挙型と3値の奇妙な動作

  9. 9

    奇妙な動作をするJava文字列分割関数

  10. 10

    TFileStreamは非常に奇妙な動作をします

  11. 11

    列挙型を動的に生成する

  12. 12

    列挙型属性を動的に追加する

  13. 13

    列挙型メソッドをオーバーライドする際の奇妙な動作。getClass()。getInterfaces()は正しく機能していますか?

  14. 14

    Pythonで非常に奇妙な動作をする浮動小数点から整数への変換

  15. 15

    奇妙な列挙子の動作(副作用?)

  16. 16

    Golang列挙型はJavaの列挙型と同じように動作しますか?

  17. 17

    JavaとPostgresの列挙型 - どのように私はそれらを更新するために一緒に動作するのですか?

  18. 18

    ajaxリクエストで「var」キーワードを使用すると非常に奇妙な動作

  19. 19

    sshコマンドでサブシェルの非常に奇妙な動作をBashする

  20. 20

    オブジェクトをスケーリングするときの非常に奇妙な動作

  21. 21

    HTML5オーディオタグで非常に奇妙な動作をするSafari

  22. 22

    returnステートメントの非常に奇妙な動作:Java

  23. 23

    PHPでの非常に奇妙な動作

  24. 24

    bs4の非常に奇妙な動作

  25. 25

    非常に奇妙なUITableViewtableFooterViewの動作

  26. 26

    Textareaの非常に奇妙な動作

  27. 27

    非常に奇妙なpulseaudioの動作

  28. 28

    createobject( "HTMLFILE")での非常に奇妙な動作!

  29. 29

    C ++で文字列に文字を挿入する際の奇妙な動作

ホットタグ

アーカイブ