如何检查枚举类中的值?验证JSON返回标签是否在枚举内
我看你现在的代码逻辑存在一个关键问题:每次遍历枚举值时,只要当前枚举和result.tags不匹配,就直接进入else分支处理描述文本,这会导致哪怕后面有匹配的枚举值,程序也已经提前执行了else里的逻辑,完全不符合“只有当tags不属于任何枚举值时才处理captions”的需求。
下面是修正后的实现方案,分两种风格供你选择:
方式一:传统循环+标记变量
这种方式兼容性好,适合所有Java版本:
Gson gson = new Gson(); AnalysisResult result = gson.fromJson(data, AnalysisResult.class); // 标记是否找到匹配的枚举值 boolean isTagMatched = false; // 注意:把这里的Enum替换成你的实际枚举类(比如TagEnum) for(YourEnum p : YourEnum.values()){ if(p.name().equals(result.tags)){ isTagMatched = true; break; // 找到匹配项就跳出循环,不用继续遍历 } } if(isTagMatched){ // 匹配成功,跳转页面 Intent in1 = new Intent(Analyze.this, Analyze2.class); startActivity(in1); }else { // 所有枚举都不匹配,处理描述文本 for (final Caption caption : result.description.captions) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // 这里写你的延迟执行逻辑 } }, 1000); // 可根据需求调整延迟时间 } }
方式二:Java 8+ Stream简化写法
如果你的项目使用Java 8及以上版本,可以用Stream API更简洁地实现判断:
Gson gson = new Gson(); AnalysisResult result = gson.fromJson(data, AnalysisResult.class); // 用Stream快速判断tags是否存在于枚举中 boolean isTagMatched = Arrays.stream(YourEnum.values()) .anyMatch(p -> p.name().equals(result.tags)); if(isTagMatched){ Intent in1 = new Intent(Analyze.this, Analyze2.class); startActivity(in1); }else { for (final Caption caption : result.description.captions) { new Handler().postDelayed(() -> { // 延迟执行的逻辑 }, 1000); } }
额外优化建议
- 务必把代码里的
YourEnum替换成你实际定义的枚举类名称,避免和Java内置的Enum类混淆。 - 如果
result.tags可能为null,建议先做非空判断,避免空指针异常:
if(result.tags != null && isTagMatched){ // 跳转逻辑 }
内容的提问来源于stack exchange,提问作者joycecruz
相关产品推荐
相关产品推荐

