2017-05-24 57 views
0

我正在創建許多POJO,並且必須爲每個POJO創建toString()方法。我認爲使用反射API創建一個類來爲我完成工作會更容易 - 我們可以在一個地方創建功能並在每個POJO中使用它。使用反射API獲取字段名稱和值

POJO中的所有字段都是私人的。 POJO是JSON對象的Java對象表示。

要求是遍歷類中的字段,並列出字段以及值。

我目前正在測試一種叫做ChannelResource.

這裏類功能是我使用列出字段名稱和值類:

import java.lang.reflect.Field; 
    public class ToStringMaker { 
     public ToStringMaker(Object o) { 

     Class<? extends Object> c = o.getClass(); 
     Field[] fields = c.getDeclaredFields(); 
     for (Field field : fields) { 
      String name = field.getName();    
      try { 
      System.out.format("%n%s: %s", name, field.get(o)); 
      } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
      } 
     } 
    }} 

我傳遞的一個實例構造函數的ChannelResource類。

編譯器不喜歡這一行field.get(o)

System.out.format("%n%s: %s", name, field.get(o)); 

編譯器說:如果

java.lang.IllegalAccessException: Class ToStringMaker can not access a member of class ChannelResource with modifiers "private" 

ToStringMaker作品我讓所有成員公開,但我真的不想這樣做。有沒有另一種方式來獲得私人領域的價值?

我知道Apache組織有一些創建toString功能的東西,但我不喜歡這種格式。

回答

0

試試這個

import java.lang.reflect.Field; 
public class ToStringMaker { 
    public ToStringMaker(Object o) { 

    Class<? extends Object> c = o.getClass(); 
    Field[] fields = c.getDeclaredFields(); 
    for (Field field : fields) { 
     String name = field.getName(); 
    field.setAccessible(true);   
     try { 
     System.out.format("%n%s: %s", name, field.get(o)); 
     } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
     } 
    } 
}} 
+0

這一工程!謝謝,mottaman85! –

相關問題