2014-09-27 85 views
0

讓利,例如說我有一個POJO類員工有三個屬性以編程方式檢索POJO對象?

1.Name(字符串) 2.Location(字符串)出生 3.Date(日期)

然後我開了查詢到該檢索表的第一行數據庫,並填充該POJO 與表中的數據如下: -

名稱 - 約翰 所在地 - 美國 出生日期 - 27/09/2014

要從這個POJO中檢索值,我必須調用getName(),getLocation()和getDOB()。

但有通過我可以得到這是在POJO存儲中的所有值,在一個對象類型的陣列,而無需使用getter方法

例如任何方法:

Object[0] has the value "John". 
Object[1] has the value "USA". 
Object[2] has the value "27/09/2014". 

(在我大約有80個屬性在一個類中,並且這些屬性的數量因爲客戶端需求而增加,我通過getter方法獲取每個值,每次添加一個屬性時,我都必須在代碼中編寫一個getter方法取值。我基本上想要一個更動態的解決方案來解決這個問題。)

+0

你已經用「反射」標記了這個,這意味着你已經知道反射是一個選項。 – 2014-09-27 15:30:18

+0

將信息作爲對象數組的目標是什麼?你將不得不使用'(String)array [1]'來獲取位置(並且祈禱位置確實在索引1處,確實是一個String),而不是'user.getLocation()'。有什麼優勢? – 2014-09-27 15:34:12

+0

@OliverCharlesworth我試過反思,但問題是它只允許你獲得方法名稱或屬性名稱之類的定義。我正在尋找的是一種方法,我可以使用存儲在屬性中的值。我猜反射不能有這個功能。 – Tairman 2014-09-27 16:43:51

回答

0

你可以試試這個:

String[] getObjectsPublicMethods(Object o) 
{ 
    Class clazz = o.getClass(); 
    Method[] methods = clazz.getDeclaredMethods(); 
    String[] result = new String[methods.length]; 
    for (int i=0; i<methods.length; ++i) 
    { 
     try 
     { 
      result[i] = (String) methods[i].invoke(o, new Object[] {}) 
     } catch (IllegalAccessException e) 
     { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } catch (InvocationTargetException e) 
     { 

     } 
    } 
    return result;   
} 

此方法使用反射來獲取你想要的信息,但 它假定getter方法在這個類中聲明爲公共方法並且所有公共方法都返回String。

+0

嘿,謝謝你解決了我的問題。 – Tairman 2014-10-11 06:55:36