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;
}
相关文章
|
21天前
|
存储 Java 编译器
【Java SE语法篇】7.面向对象——类和对象
【Java SE语法篇】7.面向对象——类和对象
【Java SE语法篇】7.面向对象——类和对象
|
1月前
|
缓存 安全 Java
Java学习—注解与反射2(狂神说超详细版)
Java学习—注解与反射(狂神说超详细版)
Java学习—注解与反射2(狂神说超详细版)
|
1月前
|
Java 程序员 编译器
Java学习—注解与反射1(狂神说超详细版)
Java学习—注解与反射(狂神说超详细版)
|
1月前
|
存储 设计模式 安全
Java 编程问题:十、并发-线程池、可调用对象和同步器2
Java 编程问题:十、并发-线程池、可调用对象和同步器
28 0
|
1月前
|
缓存 安全 Java
Java 编程问题:十、并发-线程池、可调用对象和同步器1
Java 编程问题:十、并发-线程池、可调用对象和同步器
39 0
|
7天前
|
存储 算法 Java
[Java]散列表的数据结构以及对象在JVM堆中的存储过程
[Java]散列表的数据结构以及对象在JVM堆中的存储过程
33 1
[Java]散列表的数据结构以及对象在JVM堆中的存储过程
|
4天前
|
缓存 Java 编译器
Java 构造函数与修饰符详解:初始化对象与控制权限
Java 构造函数 是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。 构造函数的作用: 为对象的属性设置初始值 执行必要的初始化操作
25 0
|
5天前
|
存储 Java
深入剖析 Java 类属性与类方法的应用
Java 类属性,也称为字段,是类中的变量。它们用于存储与类相关的数据。 创建类属性 在类定义中声明属性
37 0
|
5天前
|
Java 流计算
在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
20 4
|
6天前
|
存储 Java
深入解析 Java 面向对象编程与类属性应用
面向对象编程 (OOP) 是一种编程范式,它将程序组织成对象。对象包含数据和操作数据的方法。 OOP 的优势: 更快、更易于执行 提供清晰的结构 代码更易于维护、修改和调试 提高代码重用性 减少开发时间
41 0

相关产品

  • 云迁移中心