2015-06-23 62 views
1

我有嵌套的Javabean,例如:檢查和打印嵌套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?

回答

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> 
+0

感謝。訣竅是打印出'BeanY.x3,BeabY.x4,BeanY.strings(String)'。 – Bruce

+0

@Bruce:更新了代碼。希望能幫助到你。 –

+0

Java Beans使用「getters and setters」而不是字段。還有各種各樣的其他東西在繼續。可能最好堅持使用java.beans API。 –