属性などobj
を持つJava オブジェクトがあります。これらの属性は、public でない場合は、追加の間接レベル ( 、 ) を介してアクセスできる可能性があります。obj.attr1
obj.attr2
obj.getAttr1()
obj.getAttr2()
チャレンジ: オブジェクトを受け取り、 を返す関数が必要です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)
サブセットバリアントの場合。
ベストアンサー1
ユーザーに別の方法JacksonObjectMapper
例文は次の通りですconvertValue
:
ObjectMapper m = new ObjectMapper();
Map<String,Object> mappedObject = m.convertValue(myObject, new TypeReference<Map<String, String>>() {});