广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java反射如何获取字段属性值
  • 920
分享到

Java反射如何获取字段属性值

2024-04-02 19:04:59 920人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录Java反射获取字段属性值案例反射对象获取属性和值凭借成string描述直接上代码Java反射获取字段属性值 反射获取Java类的所有字段,包括所有父类中的字段。 类自身的字段可

Java反射获取字段属性值

反射获取Java类的所有字段,包括所有父类中的字段。 类自身的字段可直接通过方法

getDeclaredFields()【获取所有修饰符字段】或者getFields()【获取public修饰的字段】获取, 但父类中的字段暂时没有发现直接获取的方式。

需要递归获取所有的父类, 然后获取他们的字段, 最终获取到类的所有字段。 

如果要获取字段值, 则需要设置字段可访问即:field.setAccessible(true);  field为reflect包下的Field类

案例

1. 父类

package com.carl.study.SpringBoot.bean; 
import lombok.Data;
import lombok.experimental.Accessors;
 

@Data
@Accessors(chain = true)
public class BeanBasic {
 
    private Integer id;
    private Long createTime;
    private Long updateTime;
}

2. 子类

package com.carl.study.springboot.bean; 
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
 

@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Accessors(chain = true)
public class Student extends BeanBasic{
 
    private String name;
    private String address;
}

3. 测试类,获取student类的所有字段

package test.lombok; 
import com.carl.study.springboot.bean.Student;
import org.junit.Test; 
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 

public class LombokTest {
 
    @Test
    public void getParentField(){
        Student stu1 = new Student();
        stu1.setName("student-name")
            .setAddress("student1-address")
            .setId(1)
            .setCreateTime(20190310140423L)
            .setUpdateTime(20190310140423L)
        ;
 
        Class clazz = Student.class;
        List<Field> allFields = new ArrayList<>(100);
 
        // 获取当前对象的所有属性字段
        // clazz.getFields():获取public修饰的字段
        // clazz.getDeclaredFields(): 获取所有的字段包括private修饰的字段
        allFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
 
        // 获取所有父类的字段, 父类中的字段需要逐级获取
        Class clazzSuper = clazz.getSuperclass();
 
        // 如果父类不是object,表明其继承的有其他类。 逐级获取所有父类的字段
        while (clazzSuper != Object.class) {
            allFields.addAll(Arrays.asList(clazzSuper.getDeclaredFields()));
            clazzSuper = clazzSuper.getSuperclass();
        }
 
        allFields.stream().forEach(field -> {
 
            // 设置字段可访问, 否则无法访问private修饰的变量值
            field.setAccessible(true);
            try {
                // 获取字段名称
                String fieldName = field.getName();
 
                // 获取指定对象的当前字段的值
                Object fieldVal = field.get(stu1);
                System.out.println(fieldName+"="+fieldVal);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });
    }
}

4. 结果输出

反射对象获取属性和值凭借成string

描述

有些时候会用到把穿过来的对象用kv的形式拼接这个时候用反射就很不错

直接上代码

public class FanSeVo {
    private String name;
    private String id;
    //.......
    // 如果是跟外部程序或者接口对接的话,下面还可以加2个属性,一个是相互约定的秘钥,一个//是排除秘钥之后对属性和值做凭借之后的MD5加密之后的值,可以做数据安全考虑,防止传输过程数据被篡改
}
package com.ycj.my_all_demo.fanse;
import java.lang.reflect.Field;
import java.util.HashMap;

public class FanSe {
    public static void main(String[] args) {
        FanSeVo fanSeVo = new FanSeVo("1", "2");
        Field[] fields = fanSeVo.getClass().getDeclaredFields();
        HashMap<String, String> map = new HashMap<>();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
            // 把对象的属性做k,值做v
            // 当然中间还可做其他的业务操作,比如跳过某些属性什么的
                String name = field.getName();
                String s = field.get(fanSeVo).toString();
                map.put(name,s);
                System.out.println();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 吧map数据转成str,kv的形式
        String strByMap = getStrByMap(map);
        System.out.println(strByMap);//name1id2
    }
    public static String getStrByMap(HashMap<String, String> map){
        StringBuilder str = new StringBuilder();
        map.forEach((k,v)->{str.append(k).append(v);});
        return str.toString();
    }
}

总结,其实反射也不难,遇到什么多写几遍就好了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java反射如何获取字段属性值

本文链接: https://www.lsjlt.com/news/153937.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java反射如何获取字段属性值
    目录Java反射获取字段属性值案例反射对象获取属性和值凭借成string描述直接上代码Java反射获取字段属性值 反射获取Java类的所有字段,包括所有父类中的字段。 类自身的字段可...
    99+
    2022-11-13
  • Java反射怎么获取字段属性值
    今天小编给大家分享一下Java反射怎么获取字段属性值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Java反射获取字段属性值...
    99+
    2023-07-02
  • 怎么用java反射获取字段值
    要使用Java反射获取字段的值,可以按照以下步骤进行操作: 获取类的Class对象:通过`Class.forName()`方法或者...
    99+
    2023-10-27
    java
  • Java反射获取属性名、属性类型、属性值
    反射、泛型、JDBC 等基础结合起来很多时候可以使代码功能更加强大,适合更多的场景使用 一个通过反射获得属性名、属性类型、属性值的示例: import lombok.Builder;import lombok.Data;import lom...
    99+
    2023-09-30
    java 开发语言 reflect 反射
  • Java 反射设置/获取对象属性值
    ✨大家好,我是【zhuzicc】~ ,一位主攻【Java】的 攻城狮!✨ 欢迎对【Java】感兴趣的大佬,关注我 😜 ———————————————— ❤️ ❤️ ❤️ 如果觉得...
    99+
    2023-10-20
    java jvm servlet
  • java中怎么通过反射获取字段的值
    通过反射获取字段的值,可以使用Java中的Field类的get()方法。首先,需要获取字段对应的Class对象,然后再通过Class...
    99+
    2023-09-27
    java
  • java中怎么通过反射获取属性值
    在Java中,可以通过反射来获取属性的值。下面是一个示例代码:```javaimport java.lang.reflect.Fie...
    99+
    2023-09-07
    java
  • 怎么使用java反射获取对象属性值
    使用Java反射获取对象属性值的步骤如下:1. 获取对象的Class对象,可以通过对象的getClass()方法获取。```java...
    99+
    2023-09-26
    java
  • 怎么使用java反射获取属性
    要使用Java反射获取属性,可以按照以下步骤进行:1. 获取要操作的类的Class对象:```javaClass clazz = Y...
    99+
    2023-09-04
    java
  • 怎么使用java反射获取字段类型
    要使用Java反射获取字段类型,可以按照以下步骤进行:1. 获取对应类的Class对象,可以通过`Class.forName()`方...
    99+
    2023-10-10
    java
  • java如何根据字段名获取字段值
    在Java中,可以通过反射机制来根据字段名获取字段值。以下是一个示例代码:```javaimport java.lang.refle...
    99+
    2023-09-25
    java
  • Java利用反射获取object的属性和值代码示例
    在看反射顺便做个笔记,目前知道的反射的Object都是要有对象的也就是实体Bean。referance:Java反射简易教程import java.lang.reflect.Field;import java.util.ArrayList;...
    99+
    2023-05-30
    java object 反射
  • 使用反射方式获取JPAEntity的属性和值
    目录反射方式获取JPA Entity属性和值反射工具类重写toString方法通过反射获取Entity的数据1.Entity实体类2.通过java反射获取Entity数据反射方式获取...
    99+
    2022-11-13
  • java如何获取list某个字段的值
    在Java中,可以通过遍历List来获取其中某个字段的值。以下是一个示例代码:```javaimport java.util.Arr...
    99+
    2023-09-25
    java
  • Java如何取掉json数据中值为null的属性字段
    目录取掉json数据中值为null的属性字段用注解的方式放在标记类或者属性或者在配置文件中添加全局配置json返回隐藏null值的字段取掉json数据中值为null的属性字段 @Js...
    99+
    2022-11-13
  • Java获取类信息的三种方法+通过反射获取私有属性
    通过下面三种方法,我们可以获取到类的信息,包括类的名称、修饰符、父类、接口、字段、方法等信息。这些信息可以用于进行反射操作,例如动态创建对象、调用方法、访问字段等。 通过反射可以 使用Class.forName()方法 Class.forN...
    99+
    2023-10-02
    java python 开发语言
  • java反射遍历实体类属性和类型,并赋值和获取值的简单方法
    实例如下:import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;i...
    99+
    2023-05-31
    java 反射 实体类
  • js如何获取css属性值
    这篇文章主要讲解了“js如何获取css属性值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js如何获取css属性值”吧! js获...
    99+
    2022-10-19
  • springboot如何获取properties属性值
    这篇文章主要介绍springboot如何获取properties属性值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!获取properties属性值方式总结spring boot 在多环境情况下我们需要根据不同的获取不...
    99+
    2023-06-29
  • java利用反射机制如何实现获取对象的值
    本篇文章给大家分享的是有关java利用反射机制如何实现获取对象的值,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。通过反射机制得到对象中的属性和属性值 在对象中private没问...
    99+
    2023-05-31
    java 反射 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作