java - 使用反射输出对象中变量的所有值

标签 java apache-commons apache-commons-lang apache-commons-lang3

我想输出对象中变量的所有值。

目前我正在使用 ReflectionToStringBuilder 但问题是它在输出集合时包含 [,] 字符。

这是一个例子。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class Test 
{
    public int x = 10;

    public int y = 20;

    public String example = "This is some text, with a comma";

    public Collection<Integer> collection = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

    public static void main(String args[])
    {
        System.out.println(ReflectionToStringBuilder.toString(new Test(),
                ToStringStyle.NO_FIELD_NAMES_STYLE));
    }
}

输出

Test@efb78af[10,20,This is some text, with a comma,[1, 2, 3, 4, 5]]

我尝试定义自己的 ToStringStyle 但似乎没有任何选项可以删除方括号和逗号。

import org.apache.commons.lang3.builder.ToStringStyle;

public class ValueOnlyToStringStyle extends ToStringStyle
{
    public static final ToStringStyle VALUE_ONLY = new ValueOnlyToStringStyle();

    private static final long serialVersionUID = 1L;

    private ValueOnlyToStringStyle() 
    {
        super();
        this.setContentStart("");
        this.setFieldSeparator("  ");
        this.setFieldSeparatorAtStart(true);
        this.setContentEnd("");
        this.setUseClassName(false);
        this.setUseFieldNames(false);
        this.setArrayContentDetail(true);
        this.setArrayStart(" ");
        this.setArrayEnd(" ");
        this.setArraySeparator(" ");
        this.setDefaultFullDetail(true);
        this.setNullText("");
        this.setSizeStartText("");
        this.setSizeStartText("");
        this.setFieldNameValueSeparator(" ");
        this.setUseShortClassName(false);
        this.setUseIdentityHashCode(false);
        this.setSummaryObjectStartText(" ");
        this.setSummaryObjectEndText(" ");

    }
}

输出

10  20  This is some text, with a comma  [1, 2, 3, 4, 5]

我需要的是只获取不添加字符的值。

10  20  This is some text, with a comma 1 2 3 4 5

如何实现这一目标?

最佳答案

我已经在我的机器上尝试了该代码,它应该适用于您的示例。

class MyToStringStyle extends ToStringStyle {
    public MyToStringStyle() {
        setFieldSeparator(" ");
        setUseFieldNames(false);
        setUseIdentityHashCode(false);
        setUseClassName(false);
        setContentStart("");
        setContentEnd("");
    }

    @Override
    protected void appendDetail(StringBuffer buffer, String fieldName, Collection<?> coll) {
        if (coll.isEmpty()) return;
        Iterator iter = coll.iterator();
        buffer.append(iter.next());
        while (iter.hasNext()) {
            buffer.append(" ").append(iter.next());
        }
    }
}

关于java - 使用反射输出对象中变量的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51858829/

相关文章:

java - 使用多个外部 jar 文件编译和运行 java 程序

Ant 无法找到 XML 目录解析器

java - 如何将数据从另一个类传递到 GUI?

java - servlet 中的 session 失效

java - 什么会导致 close(2) 因只读文件的 EIO 而失败?

java - 减少 ToStringBuilder (apache commons) 的内存使用?

java - 是否有任何 Java API 可以根据传递的对象的字段名称对对象列表进行排序?

java - 在java中屏蔽信用卡号

java - 是否有类似库的 Commons AnnotationUtils? ( java )

java - apache.commons.lang3.DateUtils.setMonths 十二月