java - 使用 json.org JSON,您可以使用字符串来帮助重新创建枚举吗?

标签 java json string enums

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

我见过的答案thisthis one ,生成一个类,使您能够迭代常量而不是重新创建原始枚举。我想在其他现有类中传递枚举,而不必重写代码来应对新类。

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

编辑:奇怪的是,我有一个大红色横幅告诉我 Stack Overflow 需要外部 Javascript,现在我无法对帖子发表评论...

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

最佳答案

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());

更流行的 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
This is equal to MyEnum.ONE
1.0
TWO
This is equal to MyEnum.TWO
2.0
THREE
This is equal to MyEnum.THREE
3.0

关于java - 使用 json.org JSON,您可以使用字符串来帮助重新创建枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14930736/

相关文章:

java - 尝试从 servlet 连接到 Oracle XE 时出现 ORA-01017 错误

java.lang.IllegalStateException 连接到数据库的目标主机不能为空

Java 错误 - 在 java.library.path 中找不到库?

java - 当我的 webapp 服务器出现错误时,我应该提供什么服务?

javascript - 使用 D3js 绘制 JSON 到 SVG 平面图

json - URLSession 错误

php - 如何从 PHP 中的数组中检索数据

java - 如何在特定索引处的字符串中添加换行符?

C# 将 JSON 对象转换为数组

c++ - 将 QString 转换为 QString 的指针