我试图从JSON字符串重新创建,一个包含枚举常量(JSON字符串的源)的集合。我很难弄清楚如何从字符串重新创建枚举。枚举包含我需要访问的各种方法。
我看到的这一个和这一个的答案产生了一个类,该类使您能够遍历常量,而不是重新创建原始枚举。我希望在其他现有类中传递枚举,而不必重写代码来处理新类。
这可能吗?您可以使用JSON字符串来帮助重新创建枚举,以便将其用作枚举吗?
编辑:奇怪的是,我有一个红色的大横幅告诉我堆栈溢出需要外部Javascript,现在我不能评论帖子...
感谢Brian在下面的回复,但它本质上与我在这里链接的两个相同,它不会导致您实际拥有enum对象,只是通过不同的方法获得常量。
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。 多谢了。