当前位置: 首页 > 知识库问答 >
问题:

使用json。org JSON,你能用一个字符串来帮助重新创建枚举吗?

方波娃
2023-03-14

我试图从JSON字符串重新创建,一个包含枚举常量(JSON字符串的源)的集合。我很难弄清楚如何从字符串重新创建枚举。枚举包含我需要访问的各种方法

我看到的这一个和这一个的答案产生了一个类,该类使您能够遍历常量,而不是重新创建原始枚举。我希望在其他现有类中传递枚举,而不必重写代码来处理新类。

这可能吗?您可以使用JSON字符串来帮助重新创建枚举,以便将其用作枚举吗?

编辑:奇怪的是,我有一个红色的大横幅告诉我堆栈溢出需要外部Javascript,现在我不能评论帖子...

感谢Brian在下面的回复,但它本质上与我在这里链接的两个相同,它不会导致您实际拥有enum对象,只是通过不同的方法获得常量。

共有1个答案

赖杰
2023-03-14

Java中的enum是一个类,编译器会添加一个静态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());

更流行的JSON解析器Java处理枚举很好。下面是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

 类似资料:
  • 我在java中使用带字符串的开关{case()},到目前为止,它似乎工作得很好。但我想在继续太多之前确认一下;这安全吗? 我的意思是,我知道我不应该做if(“hi”==“hi”),而应该做“hi”。等于(“hi”),因为字符串指的是一个参考点。。。 我不太确定开关是如何工作的,我也无法从我的任何来源证实。。。 谢谢你!!

  • 问题内容: 使类型代表一组字符串的最佳方法是什么? 我尝试了这个: 然后如何将它们用作? 问题答案: 我不知道您想做什么,但这是我实际上翻译示例代码的方式。 另外,您可以为创建一个getter方法。 你现在可以做

  • 我试图创建一个表示JSON对象数组的字符串文字,所以我想到了使用字符串插值特性,如下面的代码所示: 现在我想使用逐字字符串,这样我就不必使用反斜杠来转义双引号。因此,通过这个答案,我了解到逐字字符串和字符串插值可以一起使用。所以我改变了我的代码如下: 但它无法编译。如果我的用法有任何错误,或者在这种情况下无法使用C#的逐字字符串功能转义双引号,有人能帮我吗?

  • 问题内容: 我有这样的数据: 新闻项目: ID 标题 日期 文本 可能有许多NewsItems说10。我必须将它们发送到jquery。 我正在这样做: 这将创建一个JSON字符串,如下所示: 这是正确的方法吗? 如何解析此字符串,以便可以在jQuery中获取每个新闻项对象,以便可以访问attr。 像这样: 或者,如果这是创建JSON字符串的错误方法,请提出一些更好的方法,并以jQuery分析为例。

  • 例如,我如何做类似的事情: 结果示例:

  • 我想使用字符串创建一个JSON对象。 示例:JSON 为了创建上面的JSON,我使用了这个。 我想知道如何创建一个包含JSON数组的JSON。 下面是示例JSON。 多谢了。