0

列挙型定数 (JSON 文字列のソース) を保持するコレクションである JSON 文字列から再作成しようとしています。文字列から列挙型を再作成する方法がわかりません。列挙型には、アクセスする必要があるさまざまなメソッドが保持されています。

私がこれこれを見た答えは、元の列挙型を再作成するのではなく、定数を反復処理できるクラスになります。新しいクラスに対処するためにコードを書き直すことなく、他の既存のクラスに列挙型を渡したい。

これは可能ですか?JSON 文字列を使用して、列挙型として使用できるように列挙型を再作成できますか?

編集:奇妙なことに、Stack Overflow には外部 Javascript が必要であり、投稿にコメントできないことを示す大きな赤いバナーがあります...

以下の返信をありがとうブライアンですが、本質的にはここにリンクした2つと同じように見えます.enumオブジェクトを実際に持っているわけではなく、別のメソッドを介した定数だけです.

4

1 に答える 1

2

enumJava の はクラスであり、コンパイラは静的メソッドを追加しますvalueOf(String name)。あなたが持っている場合:

enum MyEnum  { 
      ONE(1.0), TWO(2.0), THREE(3.0); 

      private double myDouble; 

      MyEnum(double d) {  
          myDouble = d;
      }

      public double getDouble() {
          return myDouble;
      }
}

あなたは言うことができます:

MyEnum e = MyEnum.valueOf("ONE");
assert(e.equals(MyEnum.ONE));
System.out.println(e.getDouble());

Java 用のより一般的な JSON パーサーは、列挙型を適切に処理します。Gson の例を次に示します。

public class App
{

    public static void main(String[] args) 
    {
        // Array containing your enum constants
        String json = "[\"ONE\",\"TWO\",\"THREE\"]";

        Type t = new TypeToken<Collection<MyEnum>>(){}.getType();
        Collection<MyEnum> c = new Gson().fromJson(json, t);

        for (MyEnum me : c)
        {
            System.out.println(me);
            switch(me)
            {
                case ONE:
                    System.out.println("This is equal to MyEnum.ONE");
                    break;
                case TWO:
                    System.out.println("This is equal to MyEnum.TWO");
                    break;
                case THREE:
                    System.out.println("This is equal to MyEnum.THREE");
                    break;
            }
            System.out.println(me.getDouble());

        }
    }    
}

出力:

ONE
これは MyEnum.ONE
1.0と同じです
TWO
これは MyEnum.TWO
2.0と同じです
THREE
これは MyEnum.THREE
3.0と同じです

于 2013-02-18T06:58:57.767 に答える