java - 检查并打印嵌套的 Javabean 属性

标签 java reflection javabeans

我有嵌套的 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了解更多信息。

主类

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>

关于java - 检查并打印嵌套的 Javabean 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31012156/

相关文章:

java - 按日期过滤(忽略一天中的时间)

java - Scala 反射中的线程安全与类型匹配

reflection - 反射(reflect): How to get the name of a struct field?

java - 在 apache Camel 中使用自定义注册表

java - BeanInstantiationException : Could not instantiate bean class

java - 为两个不同的 JButton 设置不同的禁用颜色? (UIManager.getDefaults 更改两个按钮)

java - 循环在中断时不停止?

angular - 如何获取绑定(bind) [(ngModel)] 的属性名称? Angular 6

scala - 使用 scala Type 设置类型参数(通过 TypeTag?)

java - Spring bean Autowiring 不起作用