import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Collection;
public class Main {
public static void main(String[] argv) {
Object o = "java2s.com";
StringBuilder sb = new StringBuilder();
int indentation = 42;
printFields(o, sb, indentation);
}
private static final void printFields(Object o, StringBuilder sb,
int indentation) {
if (o == null) {
sb.append("null");
return;
}
if (indentation > 12) {
sb.append(o);
return;
}
if (o instanceof Object[]) {
Object[] os = (Object[]) o;
sb.append("(").append(os.length).append(")[\n");
int i = 0;
for (Object o2 : os) {
generateIndentation(sb, indentation);
sb.append(i++);
sb.append(" => ");
printFields(o2, sb, indentation + 2);
sb.append("\n");
}
i = sb.length() - 1;
if (os.length == 0)
sb.setCharAt(i, ']');
else {
generateIndentation(sb, indentation - 2);
sb.append(']');
}
return;
}
if (o instanceof Collection<?>) {
Collection<? extends Object> os = (Collection<?>) o;
sb.append("(").append(os.size()).append(")[\n");
int i = 0;
for (Object o2 : os) {
generateIndentation(sb, indentation);
sb.append(i++);
sb.append(" => ");
printFields(o2, sb, indentation + 2);
sb.append("\n");
}
i = sb.length() - 1;
if (os.size() == 0)
sb.setCharAt(i, ']');
else {
generateIndentation(sb, indentation - 2);
sb.append(']');
}
return;
}
if (o.getClass().getName().startsWith("java")
&& !o.getClass().getName().equals("java.lang.Object")) {
sb.append(o);
return;
}
sb.append("{\n");
for (Field f : o.getClass().getDeclaredFields()) {
f.setAccessible(true);
if (f.isSynthetic() || (f.getModifiers() & Modifier.STATIC) > 0)
continue;
try {
generateIndentation(sb, indentation);
sb.append(f.getName()).append("=");
printFields(f.get(o), sb, indentation + 2);
sb.append("\n");
} catch (Exception e) {
}
}
int i = sb.length() - 2;
if (sb.charAt(i) == '{')
sb.setCharAt(i + 1, '}');
else {
generateIndentation(sb, indentation - 2);
sb.append("}");
}
}
private static final void generateIndentation(StringBuilder sb,
int indentation) {
while ((indentation = indentation - 2) >= 0) {
sb.append(" ");
}
}
}
利用反射从对象打印字段
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 第一组:刘聪 利用反射获取类中私有字段 类中的私有和保护类型在外部是不能直接获取到其值的,然而通过反射得到Typ...
- 输出结果: 字段:name 类型为:java.lang.String 值为:null字段:sex 类型为:java...
- 依依近日悦读书单(共14本书) (20170723-20170730) 《电梯上行》 《妈妈的肚脐》 《用七十万年...