检查并打印嵌套的 Javabean 属性

Inspect and print nested Javabean properties

我嵌套了 Javabean,例如:

public BeanX {
   private int x1;
   private int x2;
   private List<BeanY> beany;
   …// getters and setters
}

public BeanY {
   private int x3;
   private int x4;
   private List<String> strings;
   …// getters and setters
}

在Java 代码中,我只知道第一个Javabean (BeanX) 的名称。是否有可能发现 BeanX 使用的所有类型的所有属性并打印它们,例如如下所示:

BeanX.x1
BeanX.x2
BeanX.beany (BeanY)
BeanY.x3
BeabY.x4
BeanY.strings  (String)

参考:Javabean Introspector - what is in my List?

您可以使用反射来做到这一点 API。这只是一个基本代码。您可能需要查看 this tutorial 了解更多信息。

主要Class

import java.util.*;
import java.lang.reflect.*;
import java.io.*;


class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        BeanX bx=new BeanX();
        printFields(bx.getClass());
    }

    static void printFields(Class bx ) throws java.lang.Exception{

            if(bx!=null && !bx.getSimpleName().equals("String")){
                for (Field field : bx.getDeclaredFields()){
                     field.setAccessible(true);
                     System.out.println(bx.getSimpleName()+"."+field.getName() 
                     +"->" +field.getGenericType());

                     if(field.getGenericType() instanceof ParameterizedType)
                        printFields((Class)(((ParameterizedType)field.getGenericType())
                        .getActualTypeArguments()[0]));
                }
            }
    }
}

class BeanX {
   private int x1;
   private int x2;
   private List<BeanY> beany;

   public void setBeany(List<BeanY> beany){
    this.beany=beany;
   }

}

class BeanY {
   private int x3;
   private int x4;
   private List<String> strings;

   public void setStrings(List<String> strings){
    this.strings=strings;
   }
}

输出

BeanX.x1->  int
BeanX.x2->  int
BeanX.beany->  java.util.List<BeanY>
BeanY.x3->  int
BeanY.x4->  int
BeanY.strings-> java.util.List<java.lang.String>