检查并打印嵌套的 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>
我嵌套了 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>