Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java introspection: object to map

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),
  • or toMap(obj, "attr1", "attr3") (where attr1 and attr3 are a subset of obj's attributes),
  • or perhaps 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.

like image 560
Radim Avatar asked Jul 22 '11 21:07

Radim


People also ask

Can we convert object to map in Java?

In Java, you can use the Jackson library to convert a Java object into a Map easily.

Can object convert to map?

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.

Why reflection is used in Java?

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.

What is the Java reflection API?

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.


1 Answers

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>>() {}); 
like image 111
Endeios Avatar answered Sep 21 '22 15:09

Endeios