객체로부터 반사를 사용하여 필드 인쇄
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(")[
");
int i = 0;
for (Object o2 : os) {
generateIndentation(sb, indentation);
sb.append(i++);
sb.append(" => ");
printFields(o2, sb, indentation + 2);
sb.append("
");
}
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(")[
");
int i = 0;
for (Object o2 : os) {
generateIndentation(sb, indentation);
sb.append(i++);
sb.append(" => ");
printFields(o2, sb, indentation + 2);
sb.append("
");
}
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("{
");
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("
");
} 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(" ");
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.