Java反射获取对象中特定属性的值

简介: Java反射获取对象中特定属性的值 问题一:如何找到某个对象中特定属性的值? public static Object getFieldValueByObject (Object object , String targetFieldName) throws Exception { ...

Java反射获取对象中特定属性的值

问题一:如何找到某个对象中特定属性的值?

public static Object getFieldValueByObject (Object object , String targetFieldName) throws Exception {

    // 获取该对象的Class
    Class objClass = object.getClass();
    // 获取所有的属性数组
    Field[] fields = objClass.getDeclaredFields();
    for (Field field:fields) {
        // 属性名称
        String currentFieldName = "";
        // 获取属性上面的注解 import com.fasterxml.jackson.annotation.JsonProperty;
        /**
         *  举例:
         *   @JsonProperty("di_ren_jie")
         *   private String diRenJie;
         */
        boolean has_JsonProperty =  field.isAnnotationPresent(JsonProperty.class);
        if(has_JsonProperty){
            currentFieldName = field.getAnnotation(JsonProperty.class).value();
        }else {
            currentFieldName = field.getName();
        }
        if(currentFieldName.equals(targetFieldName)){
            return field.get(object); // 通过反射拿到该属性在此对象中的值(也可能是个对象)
        }
    }
    return null;
}


问题二:如何找到某个对象中的List属性值里面的属性值

 
public static List getListFieldValueByObject (Object object , String targetFieldName) throws Exception {

    List<Object> returnList = new ArrayList<>();
    // 获取该对象的Class
    Class objClass = object.getClass();
    // 获取所有的属性数组
    Field[] fields = objClass.getDeclaredFields();
    for (Field field:fields) {

        // 判断属性是否是List类型
        if(field.getGenericType() instanceof List){
            // 对应的属性值,假设泛型List<YouObject>
            /**
             * 举例:
             * @JsonProperty("xi_you_ji")
             * private List<XiYouJi> xiYouJi;
             */
            List<YouObject> fieldValue = (List) field.get(object);
            // 获取List泛型中的对象的Class
            Class youObjectClass = YouObject.getClass(); // 此处同样可以反射获取List对应的对象无需限定死
            Field[] youObjectFields = youObjectClass.getDeclaredFields();
            // 遍历List对象属性
            for (YouObject youObject :fieldValue) {
                // 从对象中获取目标属性值
                for (Field youObjectField : youObjectFields) {
                    // 属性名称
                    String currentFieldName = "";
                    // 获取属性上面的注解 import com.fasterxml.jackson.annotation.JsonProperty;
                    /**
                     *  举例:
                     *   @JsonProperty("di_ren_jie")
                     *   private String diRenJie;
                     */
                    boolean has_JsonProperty =  field.isAnnotationPresent(JsonProperty.class);
                    if(has_JsonProperty){
                        currentFieldName = field.getAnnotation(JsonProperty.class).value();
                    }else {
                        currentFieldName = field.getName();
                    }
                    if(currentFieldName.equals(targetFieldName)){
                        returnList.add(field.get(object));
                    }
                }
            }
        }
    }
    return returnList;
}
相关文章
|
28天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
37 0
|
15小时前
|
设计模式 Java Spring
来聊聊Java的反射机制(下)
来聊聊Java的反射机制(下)
5 0
|
2天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
2天前
|
Java
Java 反射
Java 反射
|
3天前
|
设计模式 Java 索引
由反射引出的Java动态代理与静态代理
由反射引出的Java动态代理与静态代理
12 0
|
3天前
|
存储 Java Shell
深入剖析Java中的反射,由浅入深,层层剥离!
深入剖析Java中的反射,由浅入深,层层剥离!
10 1
|
4天前
|
Java
Java基础之对象的引用
Java基础之对象的引用
5 0
|
8天前
|
监控 Java 开发者
掌握 Java 反射和动态代理
【4月更文挑战第19天】Java反射和动态代理提供强大功能和灵活性。反射允许运行时检查和操作类,获取类信息、动态调用方法,但可能带来性能损失和降低代码可读性。动态代理则用于创建代理对象,实现透明性和横切关注点分离,常用于日志、权限检查等。两者结合能实现更复杂功能。掌握这些技术能提升代码的灵活性和可扩展性,但也需注意性能和可读性。通过学习和实践,能更好地构建高效软件系统。
|
8天前
|
Java
Java中如何克隆一个对象?
【4月更文挑战第13天】
15 0
|
10天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。