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

能否将字符串与Plays类的属性名称进行匹配比较?

判断字符串是否匹配Plays类的属性名称?

现有Plays类代码

public class Plays {
    private Hamlet hamlet;
    private AsLike aslike;
    private Othello othello;

    public Plays() {
    
    }

    //getters & setters
}

待解析的JSON结构

{
    "hamlet": {
         "name": "Hamlet",
         "type": "tragedy"
     },
     "aslike": {
         "name": "As You Like It",
         "type": "comedy"
     },
     "othello": {
         "name": "Othello",
         "type": "tragedy"
     }
}

场景与需求

已知改用Play.java类并将实例存入列表的方案更合理,但由于待解析的JSON为嵌套对象结构且不可修改,调整Java类结构会影响JSON解析。当前核心需求是:判断给定字符串是否与Plays类的属性名称(如hamlet、aslike、othello)一致。


解决方案:完全可以实现

以下是两种常用的实现方式:

方式一:利用Java反射机制

通过反射获取Plays类的所有字段,提取字段名存入集合后,直接判断目标字符串是否在集合中。这种方式无需手动维护属性列表,能自动适配类的字段变更:

import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Set;

public class PlayChecker {
    public static boolean isPlayProperty(String target) {
        Class<Plays> playsClass = Plays.class;
        Field[] fields = playsClass.getDeclaredFields();
        Set<String> propertyNames = new HashSet<>();
        
        for (Field field : fields) {
            propertyNames.add(field.getName());
        }
        
        return propertyNames.contains(target);
    }

    public static void main(String[] args) {
        System.out.println(isPlayProperty("hamlet"));  // 输出 true
        System.out.println(isPlayProperty("macbeth")); // 输出 false
    }
}

注意:getDeclaredFields()可以获取类中所有声明的字段(包括private修饰的),无需额外设置访问权限,因为我们只需要读取字段名称。

方式二:手动维护属性名称集合

如果不想使用反射,可手动将Plays类的属性名存入常量集合,直接进行判断。这种方式性能更好,但需要注意当Plays类的属性修改时,需同步更新集合:

import java.util.HashSet;
import java.util.Set;

public class PlayChecker {
    private static final Set<String> PLAY_PROPERTY_NAMES = new HashSet<>();
    
    static {
        PLAY_PROPERTY_NAMES.add("hamlet");
        PLAY_PROPERTY_NAMES.add("aslike");
        PLAY_PROPERTY_NAMES.add("othello");
    }

    public static boolean isPlayProperty(String target) {
        return PLAY_PROPERTY_NAMES.contains(target);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:35:27