You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java能否像JavaScript一样通过字符串访问对象属性?

Java中通过字符串访问对象属性的实现方式

Java本身没有像JavaScript那样直接用object["property"]的语法访问对象属性的支持,但可以利用**反射(Reflection)**机制实现类似功能。

核心实现思路

  • 先获取目标对象的Class实例,可通过对象.getClass()或类名.class两种方式获取。
  • 借助Class对象的getField(String name)(仅能访问公共属性)或getDeclaredField(String name)(可访问任意修饰符的属性,包括私有)方法,传入属性名字符串得到对应的Field对象。
  • 调用Field的get(Object obj)方法读取属性值,或set(Object obj, Object value)方法修改属性值。若目标属性是私有修饰,需先调用field.setAccessible(true)解除访问限制。

示例代码

import java.lang.reflect.Field;

public class ReflectDemo {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.setNickname("Bob");
        person.setAge(30);

        // 读取私有属性nickname的值
        Class<?> personClass = person.getClass();
        Field nicknameField = personClass.getDeclaredField("nickname");
        nicknameField.setAccessible(true);
        String nicknameValue = (String) nicknameField.get(person);
        System.out.println("昵称: " + nicknameValue); // 输出 昵称: Bob

        // 修改私有属性age的值
        Field ageField = personClass.getDeclaredField("age");
        ageField.setAccessible(true);
        ageField.set(person, 31);
        System.out.println("年龄: " + person.getAge()); // 输出 年龄: 31
    }
}

class Person {
    private String nickname;
    private int age;

    public String getNickname() { return nickname; }
    public void setNickname(String nickname) { this.nickname = nickname; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

注意事项

  • 反射会产生一定性能损耗,且绕过了Java的封装机制,可能破坏代码的安全性和可维护性,非必要场景不建议大量使用。
  • 操作反射时需处理NoSuchFieldException、IllegalAccessException等异常。

内容的提问来源于stack exchange,提问作者Dark Rebellion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:35:30