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

如何使用ToStringBuilder.reflectionToString获取ArrayList的内容

如何用reflectionToString获取ArrayList的元素内容?

你遇到的这个情况很常见,问题出在ArrayList存储元素的核心字段elementData上——它被transient关键字修饰了,而ToStringBuilder.reflectionToString默认会跳过transient修饰的字段,所以你只能看到对象地址和size字段,看不到实际元素。

下面给你两种可行的解决方案:

方案1:配置ReflectionToStringBuilder包含transient字段

直接使用ReflectionToStringBuilder的重载方法,手动设置允许输出transient字段,同时开启递归输出内部元素:

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.RecursiveToStringStyle;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<String> nodeList = new ArrayList<>();
        nodeList.add("Inpt1");
        nodeList.add("Inpt2");

        String result = ReflectionToStringBuilder.toString(
                nodeList,
                new RecursiveToStringStyle() {
                    {
                        setUseTransient(true); // 允许输出transient修饰的字段
                    }
                },
                true, // 输出所有访问权限的字段(包括非public)
                true  // 递归解析内部对象的字段
        );
        System.out.println(result);
    }
}

运行后你会得到类似这样的输出,能看到elementData数组里的具体元素:

java.util.ArrayList@5ca881b5[
elementData={Inpt1, Inpt2, null, null, null, null, null, null, null, null},
size=2
]

方案2:结合ArrayList自身的toString方法(简化版)

如果你只是想快速看到元素内容,其实ArrayList已经重写了toString()方法,直接调用就能输出元素,不需要用反射:

System.out.println(nodeList.toString());

输出会是:[Inpt1, Inpt2]

不过如果你的场景必须用反射ToString的方式,方案1就是最优解啦。

内容的提问来源于stack exchange,提问作者ravi k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:10:05