Javaイントロスペクション: マップするオブジェクト 質問する

Javaイントロスペクション: マップするオブジェクト 質問する

属性などobjを持つJava オブジェクトがあります。これらの属性は、public でない場合は、追加の間接レベル ( 、 ) を介してアクセスできる可能性があります。obj.attr1obj.attr2obj.getAttr1()obj.getAttr2()

チャレンジ: オブジェクトを受け取り、 を返す関数が必要ですMap<String, Object>。キーは文字列など"attr1""attr2"値は対応するオブジェクト ですobj.attr1obj.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>>() {});

おすすめ記事