2015-06-23 3 views
1

Я вложенное 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 коде, я знаю только имя первого бин (BeanX). Можно ли обнаружить все свойства всех типов, используемых BeanX и печатать их, например, следующим образом:

BeanX.x1 
BeanX.x2 
BeanX.beany (BeanY) 
BeanY.x3 
BeabY.x4 
BeanY.strings (String) 

Ссылка: Javabean Introspector - what is in my List?

ответ

1

Вы можете сделать это с помощью Reflection 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», а не поля. Там все виды других вещей продолжаются. Вероятно, лучше всего придерживаться API 'java.beans'. –

Смежные вопросы