2012-05-21 80 views
2

我有一類像得到的順序一個java bean的屬性的名稱列表/陣列它們出現在源文件中

class A { 

    private String property1; 

    private String property2; 

    private String property3; 

    // constructor , getters , setters 

} 

就可以得到一個列表/陣列按照它們在源文件中出現的順序顯示此類的屬性名稱?像["property1", "property2", "property3"]

+3

請問爲什麼?這聽起來像一個非常糟糕的主意。 – Jeremy

+0

你想要什麼「這個」? – Sajmon

+1

在我的代碼的一些其他部分,我需要以特定的順序「打印」這個類的數據。這個類在真實情況下有很多屬性,並且可以改變(作爲順序),所以我可以自己寫這個數組/列表來獲得我需要的順序,但是如果可以從類中獲得它,它將會是對我更好。 – res1

回答

2

答案是你不能。您需要的信息在運行時不可用.class文件。

在我的代碼的其他部分,我需要按特定順序「打印」這個類的數據。這個類在真實情況下有很多屬性,並且可以改變(作爲順序),所以我可以自己寫這個數組/列表來獲得我需要的順序,但是如果可以從類中獲得它,它將會是對我更好。

這裏有一些更好的方法來解決這個問題:

  • 排序打印前的屬性,通過名稱或類型名稱,或者說是有道理的。
  • 將數組嵌入定義bean屬性順序的bean類(或另一個類)中。
  • 創建一個單獨的元數據文件,指定bean的屬性順序。

您可以對源代碼進行一些構建時間預處理,以提取屬性的順序並(比如)將它們寫入文件。但坦率地說,我認爲最好將這些方面分開;例如以便您的系統集成商/最終用戶可以在不更改源代碼的情況下調整財產訂單。

1

就可以得到這個類

是屬性的名稱列表/陣列,它們出現在源文件中的順序使用Class.getDeclaredFields()

不,沒有任何形式的保證,除非你解析源文件。

+0

如何使用調試信息根據行號進行排序? –

+0

@ThorbjørnRavnAndersen - 只能用於具有初始值設定項的屬性。行號調試信息從(字節碼)PC號碼映射到行號。 –

1

這不是完全可能的。 Class#getDeclaredFields不保證返回字段的順序。然而,在我剛剛進行的測試中,這些字段確實是按照他們的聲明順序返回的。

相關問題