Java 反射设置List属性

news/2024/5/19 2:26:56 标签: java, list, 反射

使用 Java 反射可以动态地设置对象的属性值,包括 List 类型的属性。以下是一个示例代码,演示如何通过反射设置 List 类型的属性:

假设有一个类 Person,包含一个 List 类型的属性 names:

java

public class Person {  
    private List<String> names;

    public List<String> getNames() {
        return names;
    }

    public void setNames(List<String> names) {
        this.names = names;
    }
}

现在,我们使用反射来动态地设置 Person 对象的 names 属性:

import java.lang.reflect.Field;  
import java.util.ArrayList;  
import java.util.List;  
  
public class Main {  
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        Class<?> clazz = person.getClass();
        // 获取 names 属性对应的 Field 对象
        Field field = clazz.getDeclaredField("names");
        // 设置属性可访问性为 true,以避免访问权限问题
        field.setAccessible(true);
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        // 设置 names 属性的值为新的 List 对象,注意要使用 field.set() 方法来设置属性值,而不是直接使用 names = person.names = names; 的形式赋值
        field.set(person, names);
        // 输出 [Alice, Bob]
        System.out.println(person.getNames());
    }
}

在上面的代码中,我们首先创建了一个 Person 对象,然后获取了该对象的 Class 对象。接着,我们通过调用 Class 对象的 getDeclaredField() 方法获取了 names 属性对应的 Field 对象,并将属性的可访问性设置为 true,以确保我们可以访问该属性。接下来,我们创建了一个新的 List 对象,并将两个字符串添加到列表中。最后,我们通过调用 Field 对象的 set() 方法将新的 List 对象设置为 names 属性的值。在输出结果中可以看到,我们已经成功地设置了 names 属性的值,并且成功地访问了该属性的值。

测试打印结果


http://www.niftyadmin.cn/n/5178578.html

相关文章

【KCC@南京】KCC南京数字经济-开源行

一场数字经济与开源的视听盛宴&#xff0c;即将于11月26日&#xff0c;在南京举办。本次参与活动的有&#xff1a; 庄表伟&#xff08;开源社理事执行长、天工开物开源基金会执行副秘书长&#xff09;、林旅强Richard&#xff08;开源社联合创始人、前华为开源专家&#xff09;…

数据结构(二)基本概念和术语

&#x1f600;前言 本人是根据bi站王卓老师视频学习并且做了相关笔记希望可以帮助到大家 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&…

每日一题(LeetCode)----数组--长度最小的子数组的相关题(一)

每日一题(LeetCode)----数组–长度最小的子数组的相关题&#xff08;一&#xff09; 1.题目&#xff08;904. 水果成篮&#xff09; 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的…

Vscode舒适的主题推荐

1. One Dark Pro与One Dark Pro Darker 感觉配色特别好看&#xff0c;强烈推荐

Actipro Software WPF Controls 23.1.3

Actipro Software WPF Controls v23.1.3 Actipro Software 为 Microsoft 提供软件组件和 .NET 平台。它位于克利夫兰&#xff0c;重点主要是提供高质量的用户界面软件组件以及客户的过程&#xff0c;以便他们有能力信任&#xff0c;以便为用户应用程序添加强大的功能。自 .NET…

怎样用 vs2017编写一个cpp并运行

02 第一个C程序-C书写HelloWorld_哔哩哔哩_bilibili 1 第一个C程序 编写一个C程序总共分为4个步骤 创建项目 创建文件 编写代码 运行程序 1.1 创建项目 Visual Studio是我们用来编写C程序的主要工具&#xff0c;我们先将它打开 1.2 创建文件 右键源文件&#xff0c;选…

电脑桌面图标打不开?三种方法让你轻松应对

电脑桌面上的图标是我们日常使用电脑的入口&#xff0c;但有时候您可能会遇到一个常见问题&#xff0c;电脑桌面图标打不开。这个问题可能会让您感到困惑&#xff0c;但幸运的是&#xff0c;通常有多种方法可以解决。本文将详细介绍三种常见的解决方法&#xff0c;帮助您恢复桌…

保护多个子域名——通配符证书

在当今的互联网世界中&#xff0c;许多组织和企业拥有复杂的网站结构&#xff0c;包含许多不同的子域名。而为每个子域名单独购买和管理SSL证书可能会相当繁琐。解决这一问题的理想选择就是通配符证书。 一、什么是通配符SSL证书&#xff1f; 通配符SSL证书又叫泛域名证书&am…