检查并打印嵌套的Javabean属性

时间:2015-06-23 19:48:30

标签: java reflection javabeans

我已经嵌套了Javabeans,例如:

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?

1 个答案:

答案 0 :(得分:1)

您可以使用反射API执行此操作。这只是一个基本代码。您可以查看this tutorial以获取更多信息。

主要类

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>