What's the best way to register a Converter for all subclasses of a particular class when using Commons BeanUtils?

StackOverflow https://stackoverflow.com/questions/4956714

  •  12-11-2019
  •  | 
  •  

Frage

For example, if I wished to register a Converter for all instances of java.util.Map, is there some way of doing this:

new BeanUtilsBean().getConvertUtils().register(new MyConverter(), Map.class);

where the MyConverter#convert() method would be called for any instance of a Map (for instance a HashMap)?

The background to this is that I'm using BeanUtils to populate various different beans from a database. Some of their properties are enums that implement a particular interface, and to set their values a custom routine is needed. I'd hoped to register a single converter class for all implementations of the interface in question but couldn't find a way of doing this, so ended up having to do it on the fly by inspecting the class of every property in the beans and registering my converter class if they happened to be instances of this interface:

BeanUtilsBean b = new BeanUtilsBean();
Class< ? > propertyType = pu.getPropertyType(this, setterName);

if (isImplementationOfMyInterface(propertyType)) {
    b.getConvertUtils().register(new MyConverter(), propertyType);
}

b.setProperty(this, setterName, value);

This seems rather nasty, and I'm sure there must be a better way of doing this?

Keine korrekte Lösung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top