I have a Java object obj
that has attributes obj.attr1
, obj.attr2
etc. The attributes are possibly accessed through an extra level of indirection: obj.getAttr1()
, obj.getAttr2()
,如果不公开的话。
挑战:我想要一个接受对象并返回 Map<String, Object>
的函数,其中键是字符串 "attr1"
, "attr2"
对应的值是对象 obj.attr1
, obj.attr2
。我想这个函数会被类似的东西调用
toMap(obj)
,- or
toMap(obj, "attr1", "attr3")
(whereattr1
andattr3
are a subset ofobj
’s attributes), - 或者
toMap(obj, "getAttr1", "getAttr3")
如有必要。
我不太了解Java的内省:你如何在Java中做到这一点?
现在,对于我关心的每个对象类型,我都有一个专门的 toMap()
实现,它的样板太多了。
注意:对于那些了解 Python 的人,我想要类似 obj.__dict__
的东西。或者 dict((attr, obj.__getattribute__(attr)) for attr in attr_list)
对于子集变体。
原文由 Radim 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以为此使用 JavaBeans 自省。阅读
java.beans.Introspector
类:重要警告: 我的代码只处理 getter 方法;它不会找到裸露的字段。对于字段,请参阅 highlycaffeinated 的答案。 :-)(您可能希望将这两种方法结合起来。)