[英]Library to print all public fields of nested Java objects?
我需要打印嵌套Java對象的所有公共字段。 這些對象僅包含數據,沒有方法。 在對象樹的任何級別(葉節點除外)上,字段都可以是Maps,Lists,Sets和arrays。 葉節點是原始類型。 嵌套字段應打印為以下格式的字符串:
<fieldName1>.<fieldName2>. ... <fieldNameN>==<value>
哪里:
<fieldName1> -- root (top level) field name
<fieldNameN> -- N-level field name
<value> -- N-level field value.
有沒有圖書館來解決這個任務?
以下示例遠遠不夠完整-它起草了一個解決方案並顯示了一些陷阱:
public class Main {
private static Set<Object> visited = new HashSet<Object>();
public String s = "abc";
public int i = 10;
public Main INSTANCE = this;
public static void main (String[] args) throws Exception
{
printFields(new Main(), "");
}
private static void printFields(Object obj, String pre) throws Exception{
Field[] fields = obj.getClass().getFields();
for (Field field:fields) {
String value = "";
String type = field.getType().toString();
// handle primitve values
if (type.equals("int")) {
value += field.getInt(obj);
}
// handle special types, you may add Wrapper classes
else if (type.equals("class java.lang.String")) {
value = field.get(obj).toString();
}
// handle all object that you want to inspect
else {
if (visited.contains(field.get(obj))) {
// necessary to prevent stack overflow
value = "CYCLE DETECTED";
} else {
// recursing deeper
visited.add(field.get(obj));
pre += field.getName() + ".";
printFields(field.get(obj), pre);
}
}
System.out.printf("%s%s = %s%n", pre, field.getName(), value);
}
}
}
String
對象中 注意-代碼非常丑陋,希望可以給您一個想法
無需圖書館。 這在Java中稱為反射。 使用以下方法可以查看類文檔 :
for(Field field : YourClass.class.getFields()){
//Print field info
}
編輯:您可以通過執行getDeclaringClass()
獲得Field
的類。 可以通過執行isPrimitive()
來檢查此類是否為原始isPrimitive()
。 如果是,則可以打印該值。 如果沒有,您可以遞歸並打印該字段的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.