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()
, if not public.
The challenge: I want a function that takes an object, and returns a Map<String, Object>
, where the keys are strings "attr1"
, "attr2"
etc. and values are the corresponding objects obj.attr1
, obj.attr2
. I imagine the function would be invoked with something like
toMap(obj)
,toMap(obj, "attr1", "attr3")
(where attr1
and attr3
are a subset of obj
's attributes), toMap(obj, "getAttr1", "getAttr3")
if necessary.I don't know much about Java's introspection: how do you do that in Java?
Right now, I have a specialized toMap()
implementation for each object type that I care about, and it's too much boilerplate.
NOTE: for those who know Python, I want something like obj.__dict__
. Or dict((attr, obj.__getattribute__(attr)) for attr in attr_list)
for the subset variant.
In Java, you can use the Jackson library to convert a Java object into a Map easily.
To convert an object to a Map , call the Object. entries() method to get an array of key-value pairs and pass the result to the Map() constructor, e.g. const map = new Map(Object. entries(obj)) . The new Map will contain all of the object's key-value pairs.
Reflection is a feature in the Java programming language. It allows an executing Java program to examine or "introspect" upon itself, and manipulate internal properties of the program. For example, it's possible for a Java class to obtain the names of all its members and display them.
Reflection is an API that is used to examine or modify the behavior of methods, classes, and interfaces at runtime. The required classes for reflection are provided under java.lang.reflect package which is essential in order to understand reflection.
Another way to user JacksonObjectMapper
is the convertValue
ex:
ObjectMapper m = new ObjectMapper(); Map<String,Object> mappedObject = m..convertValue(myObject, new TypeReference<Map<String, String>>() {});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With