写一个方法,此方法可通过反射方式将obj对象中被private修饰的名为propertyName的属性的值设置为value?

package cn.zxj.reflex;

public class Demo {

    private String propertyName;
}

package cn.zxj.reflex;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

public class Test {

    public static void main(String[] args) throws Exception {
        Class c = Class.forName("cn.zxj.reflex.Demo");
        Constructor constructor = c.getConstructor();
        Object o = constructor.newInstance();
        Field propertyName = c.getDeclaredField("propertyName");
        propertyName.setAccessible(true);
        propertyName.set(o,"123");
        System.out.println(propertyName.get(o));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用反射来实现,示例代码如下:Class clazz = obj.getClass(); Field field = clazz.getDeclaredField(propertyName); field.setAccessible(true); Object value = field.get(obj); ### 回答2: 在Java,我们可以使用反射来获取对象某个属性。下面是一个示例方法,可以根据对象属性名获取属性: ```java import java.lang.reflect.Field; public class PropertyInfoUtil { public static Object getPropertyValue(Object obj, String propertyName) { try { // 获取对象的Class Class<?> objClass = obj.getClass(); // 根据属性名获取对应的Field对象 Field field = objClass.getDeclaredField(propertyName); // 设置可访问,因为有些属性是私有的 field.setAccessible(true); // 返回属性 return field.get(obj); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } return null; } public static void main(String[] args) { // 示例用法 Person person = new Person("John", 25); String name = (String) getPropertyValue(person, "name"); int age = (int) getPropertyValue(person, "age"); System.out.println("Name: " + name); System.out.println("Age: " + age); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 上述示例代码定义了一个工具类 `PropertyInfoUtil`,其的 `getPropertyValue` 方法可以通过反射获取对象指定名称的属性。 在 `main` 方法,我们创建了一个 `Person` 类的实例,然后分别使用 `getPropertyValue` 方法获取了 `name` 和 `age` 属性,并打印出来。 需要注意的是,由于此方法使用了反射,所以在一些特殊情况下可能会抛出异常,如属性不存在或不可访问。因此我们通过 `try-catch` 捕获可能出现的异常,并返回 `null`。需要在实际使用时进行异常处理。 ### 回答3: 可以使用Java反射机制来编一个方法来获取obj对象名为propertyName的属性。具体的代码如下: ```java import java.lang.reflect.Field; public class Main { public static Object getPropertyValue(Object obj, String propertyName) throws NoSuchFieldException, IllegalAccessException { Class<?> clazz = obj.getClass(); Field field = clazz.getDeclaredField(propertyName); field.setAccessible(true); return field.get(obj); } public static void main(String[] args) { MyClass myObj = new MyClass(); myObj.setName("John"); myObj.setAge(25); try { String name = (String) getPropertyValue(myObj, "name"); int age = (int) getPropertyValue(myObj, "age"); System.out.println("Name: " + name); System.out.println("Age: " + age); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } } class MyClass { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` 这个方法使用Java反射机制,首先获取到obj对象的Class对象,然后通过Class对象的getDeclaredField方法获取到名为propertyName的私有属性(如果属性是公有的,也可以使用getField方法)。接下来设置属性的可访问性为true,然后使用Field对象的get方法获取属性。在示例,我们创建了一个MyClass对象,并为其设置了name和age属性。然后通过调用getPropertyValue方法,分别获取到了name和age的,并打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值