java - 使用 Java 类反射的泛型 "quasi toString()"

标签 java reflection

我一直在尝试创建一个健壮的代码来打印出任何 Java 类以进行调试。为此,我使用反射。 为了防止递归定义,例如“Boolean contains static final Boolean TRUE”,我忽略了等于其父项的字段。 我使用 String += 只是出于懒惰。它不一定是高效的。

但是,有没有更好的方法来对具有反射的对象进行递归描述?

public String reflectionShowFields(Object parentObject) {
    String stringData = "";

    for (Field field:parentObject.getClass().getFields()) {
        try {
            Class<?> type = field.getType();
            String typeSimpleName = type.getSimpleName();
            Object fieldValue = field.get(parentObject);
            String fieldName = field.getName();
            if (type.isPrimitive() || type.isEnum() || CharSequence.class.isAssignableFrom(type)) {
                stringData += String.format("%s: %s\n", fieldName, fieldValue);
            } else if (Iterable.class.isAssignableFrom(type)) {
                stringData += String.format(">>> %s[%s]: \n", fieldName, typeSimpleName);
                for (Object item:(Iterable)fieldValue) {
                    stringData += reflectionShowFields(item);
                }
                stringData += String.format("<<< %s[%s]: \n", fieldName, typeSimpleName);
            } else if (!fieldValue.equals(parentObject)) {
                stringData += String.format(">>> %s[%s]: %s \n--------\n", fieldName, typeSimpleName, fieldValue.toString());
                stringData+= reflectionShowFields(fieldValue);
                stringData += String.format("<<< %s[%s]: \n", fieldName, typeSimpleName);
            }
        } catch (IllegalAccessException ignored) {}
    }
    return stringData;
}

最佳答案

关于java - 使用 Java 类反射的泛型 "quasi toString()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14961383/

相关文章:

java - 如何将某个 S3 文件标记为公开

java - JEE8有没有取消HTTP 2请求处理的功能

c# - 未知类型的 CreateDelegate

java - 为什么隐式转换工作而反射转换抛出异常?

java - 使用 BigInteger 的求和和乘法

java - 如何滚动到 JTable 中的最后一行

c# - 如何在使用反射加载的程序集中使用 CaSTLe.Windsor

reflection - 使用嵌入在结构中的接口(interface)进行反射 - 如何检测 "real"函数?

java - XML SAX 解析器错误 : value must not contain the '<' character - pointing to TNS value without '<' character

go - 如何修改未知类型的结构中的字段?