in src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java [1099:1144]
private static boolean isAcceptableType(Class<?> type, Type genericType, Object value) {
if (type.isInstance(value)) {
if ((type == Collection.class || type == List.class) && genericType instanceof ParameterizedType &&
value instanceof Collection) {
Iterator<?> it = ((Collection<?>) value).iterator();
if (!it.hasNext()) {
// empty collection, so it doesn't really matter
return true;
} else {
// this is not an ideal way to get the actual component type, but erasure...
Class<?> actualComponentType = it.next().getClass();
Class<?> desiredComponentType = (Class<?>) ((ParameterizedType) genericType).getActualTypeArguments()[0];
return desiredComponentType.isAssignableFrom(actualComponentType);
}
} else {
return true;
}
}
if (type == Integer.TYPE) {
return Integer.class.isInstance(value);
}
if (type == Long.TYPE) {
return Long.class.isInstance(value);
}
if (type == Boolean.TYPE) {
return Boolean.class.isInstance(value);
}
if (type == Double.TYPE) {
return Double.class.isInstance(value);
}
if (type == Float.TYPE) {
return Float.class.isInstance(value);
}
if (type == Short.TYPE) {
return Short.class.isInstance(value);
}
if (type == Byte.TYPE) {
return Byte.class.isInstance(value);
}
if (type == Character.TYPE) {
return Character.class.isInstance(value);
}
return false;
}