温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何通过反射获取字段

发布时间:2026-10-04 18:16:07 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

在 Java 中,**通过反射(Reflection)获取字段(Field)**通常使用 java.lang.reflect.Field 和 Class 类。下面按常见场景给你说明。


一、获取 Class 对象

Class<?> clazz = MyClass.class;
// 或
Class<?> clazz = obj.getClass();
// 或
Class<?> clazz = Class.forName("com.example.MyClass");

二、获取字段的方式

1. 获取指定字段(包括私有字段)

Field field = clazz.getDeclaredField("name");

getDeclaredField 可以获取本类中所有字段(不含父类)


2. 获取所有字段(本类)

Field[] fields = clazz.getDeclaredFields();

3. 获取公开字段(含父类 public)

Field field = clazz.getField("age");
Field[] fields = clazz.getFields();

三、访问字段值

1. 设置可访问(私有字段必须)

field.setAccessible(true);

2. 获取字段值

Object value = field.get(obj);

3. 设置字段值

field.set(obj, "新值");

四、完整示例

class User {
    private String name;
    public int age;
}

public class Test {
    public static void main(String[] args) throws Exception {
        User user = new User();
        Class<?> clazz = user.getClass();

        // 获取私有字段
        Field nameField = clazz.getDeclaredField("name");
        nameField.setAccessible(true);
        nameField.set(user, "张三");

        // 获取公开字段
        Field ageField = clazz.getField("age");
        ageField.set(user, 18);

        System.out.println(nameField.get(user));
        System.out.println(ageField.get(user));
    }
}

五、常见注意点

  • ❗ 私有字段必须 setAccessible(true)
  • ❗ 反射会破坏封装,谨慎使用
  • ✅ 常用于:框架、序列化、ORM、单元测试

如果你指的是 Android / Kotlin / 某个具体框架(如 Spring),可以告诉我,我可以给更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手