我有嵌套的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-我的列表中有什么?
您可以使用反射API来完成。这只是一个基本的代码。您可能想查看本教程了解更多信息。
主要类别
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>