我有一個Java對象obj
具有屬性obj.attr1
,obj.attr2
等屬性都可能通過額外的間接級別訪問:obj.getAttr1()
,obj.getAttr2()
,如果不公開。Java的內省:對象映射
挑戰:我想一個函數,一個對象,並返回一個Map<String, Object>
,其中所述鍵是字符串"attr1"
,"attr2"
等和值對應的對象obj.attr1
,obj.attr2
。 我想象中的功能將與東西被調用像
toMap(obj)
,如果必要的話- 或
toMap(obj, "attr1", "attr3")
(其中attr1
和attr3
是obj
的屬性的子集), - 或許
toMap(obj, "getAttr1", "getAttr3")
。
我對Java的內省了解不多:你如何在Java中做到這一點?
現在,我有一個專門的toMap()
實施,我關心每個對象的類型,這太過分了樣板。
注意:對於那些誰知道Python的,我想是這樣obj.__dict__
。或子集變體的dict((attr, obj.__getattribute__(attr)) for attr in attr_list)
。
它是否必須遞歸? – biziclop
@biziclop:不,沒有遞歸 – Radim