反射获取、修改属性的值

反射获取与修改属性值
博客主要围绕反射展开,介绍了通过反射获取属性的值以及修改属性的值的相关内容,聚焦于信息技术中反射操作属性的关键应用。

1. 获取属性的值

private Object getAttributeByReflect(SKDCKDDto skdckd, String fieldName) {

        try {
            Field declaredField = skdckd.getClass().getDeclaredField(fieldName);
            declaredField.setAccessible(true);
            return declaredField.get(skdckd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

2. 修改属性的值

private void setDateByFieldName(SKDCKDDto skdckd, SKDCKDDateVO dateVO, String fieldName) {
        try {
            Field declaredField = skdckd.getClass().getDeclaredField(fieldName);
            declaredField.setAccessible(true);
            declaredField.set(skdckd, dateVO);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
要使用 Java 反射机制获取类的某个属性值,可以通过 `java.lang.reflect.Field` 类来实现。以下是一个完整的示例代码,演示了如何通过反射获取并访问一个对象的字段,包括私有字段。 ### 获取字段的基本步骤: 1. 获取目标类的 `Class` 对象。 2. 使用 `getDeclaredField(String name)` 或 `getField(String name)` 方法获取指定字段的 `Field` 对象。 3. 如果字段是私有的,需要调用 `setAccessible(true)` 来绕过访问控制。 4. 使用 `field.get(Object obj)` 方法获取字段的。 ### 示例代码 ```java import java.lang.reflect.Field; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 用于验证反射修改后的 public void printDetails() { System.out.println("Name: " + name + ", Age: " + age); } } public class ReflectionFieldAccess { public static void main(String[] args) throws Exception { // 创建对象 Person person = new Person("John", 25); // 获取类的Class对象 Class<?> clazz = person.getClass(); // 获取name字段 Field nameField = clazz.getDeclaredField("name"); nameField.setAccessible(true); // 允许访问私有字段 // 获取name字段的 String nameValue = (String) nameField.get(person); System.out.println("原始name:" + nameValue); // 输出 John // 修改name字段的 nameField.set(person, "Mike"); System.out.println("修改后的name:" + nameField.get(person)); // 输出 Mike // 验证修改 person.printDetails(); // 输出 Name: Mike, Age: 25 } } ``` ### 注意事项: - 使用 `getDeclaredField()` 可以访问类中的所有字段,包括私有字段;而 `getField()` 只能访问 `public` 字段。 - 若字段为私有,必须调用 `setAccessible(true)` 才能访问,否则会抛出 `IllegalAccessException` 或 `SecurityException`(如果有安全管理器)[^3]。 - 反射操作可能会对性能有一定影响,在性能敏感场景下应谨慎使用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值