// class hierarchy
// e.g. if there is an Integer property provider it is preferred
// before a Number property provider for Integer classes.
Class<?> supportedClass = Object.class;
IPropertyProvider result = new DefaultPropertyProvider();
for (Entry<Class<?>, IPropertyProvider> e : propertyProviders.entrySet()) {
// check if provider is capable of handling parentClass
if (e.getValue().supportsClass(parentClass)
&& e.getKey().isAssignableFrom(parentClass)) {