You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查枚举类中的值?验证JSON返回标签是否在枚举内

验证JSON返回的Tags是否属于枚举值的正确实现

我看你现在的代码逻辑存在一个关键问题:每次遍历枚举值时,只要当前枚举和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);
    }
}

额外优化建议

  1. 务必把代码里的YourEnum替换成你实际定义的枚举类名称,避免和Java内置的Enum类混淆。
  2. 如果result.tags可能为null,建议先做非空判断,避免空指针异常:
if(result.tags != null && isTagMatched){
    // 跳转逻辑
}

内容的提问来源于stack exchange,提问作者joycecruz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:57:38