java反射之Field用法(获取对象的字段名和属性值)

一、概述

Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息,功能包括:

  • 获取当前对象的成员变量的类型
  • 对成员变量重新设值

二、如何获取Field类对象

  • getField(String name): 获取类特定的方法,name参数指定了属性的名称
  • Class.getFields(): 获取类中public类型的属性,返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段
  • getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称
  • getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性,返回 Field 对象的一个数组

三、Field 类对象常用方法

   1.获取变量的类型:

  • Field.getType():返回这个变量的类型
  • Field.getGenericType():如果当前属性有签名属性类型就返回,否则就返回 Field.getType()
  • isEnumConstant() : 判断这个属性是否是枚举类

   2.获取成员变量的修饰符:

  • Field.getModifiers()  以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符

   3.获取和修改成员变量的值

  • getName() : 获取属性的名字
  • get(Object obj) 返回指定对象obj上此 Field 表示的字段的值
  • set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值

四、实践代码

    1.获取对象中的所有字段名

//获取所有字段名
Field[] declaredFields = FinancieWaybillPageListVo.class.getDeclaredFields();
List<String> columnList = new ArrayList<>();
for (Field declaredField : declaredFields) {
    String name = declaredFields.getName();
    if ("CustomColumnVo".equals(name)) {
        continue;
    }
    columnList.add(name);
}
userCustomColumn.setColumnName(columnList);

     2.获取对象中的所有属性的值

        // 查询对应的销货清单数据
        List<SalesListVo> lists = getSalesList(dto);
        List<Object> salesList = new ArrayList<>();
        for (SalesListVo sales : lists) {
            // 获取所有的属性数组
            Field[] fields = sales.getClass().getDeclaredFields();
            for (Field field : fields) {
                //设置允许通过反射访问私有变量
                field.setAccessible(true);
                //获取字段的值
                try {
                    salesList.add(field.get(sales));
                } catch (IllegalAccessException e) {
                    throw new RuntimeException(e);
                }
            }
        }

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以使用反射获取对象并操作属性。下面是一个示例代码,演示了如何使用反射获取类的实例并操作其属性: ```java import java.lang.reflect.Field; public class ReflectionExample { public static void main(String[] args) { // 创建一个对象 MyClass obj = new MyClass(); // 获取对象的类 Class<?> objClass = obj.getClass(); try { // 获取属性 Field field = objClass.getDeclaredField("myField"); // 打开访问权限 field.setAccessible(true); // 获取属性 Object value = field.get(obj); System.out.println("原始:" + value); // 设置属性 field.set(obj, "新的"); // 再次获取属性 value = field.get(obj); System.out.println("修改后的:" + value); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } } class MyClass { private String myField = "初始"; } ``` 在上面的示例代码中,我们首先创建了一个 MyClass 的对象 obj。然后通过 obj.getClass() 方法获取了 obj 对象的类,即 MyClass 类的 Class 对象 objClass。接下来,使用 objClass.getDeclaredField("myField") 方法获取了名为 myField 的私有字段。为了能够访问私有字段,我们通过 field.setAccessible(true) 打开了访问权限。然后,通过 field.get(obj) 方法获取了 myField 的原始,并打印输出。接着,使用 field.set(obj, "新的") 方法设置了 myField 的新。最后,再次使用 field.get(obj) 方法获取 myField 的新,并打印输出。 需要注意的是,反射操作可能会影响代码的性能和可读性,因此应该谨慎使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Javaの甘乃迪

感谢看客老爷的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值