@Override protected Object bindAggregate(ConfigurationPropertyName name, Bindable<?> target, AggregateElementBinder elementBinder) { IndexedCollectionSupplier result = new IndexedCollectionSupplier(ArrayList::new); ResolvableType aggregateType = target.getType(); ResolvableType elementType = target.getType().getComponentType(); bindIndexed(name, target, elementBinder, aggregateType, elementType, result); if (result.wasSupplied()) { List<Object> list = (List<Object>) result.get(); Object array = Array.newInstance(elementType.resolve(), list.size()); for (int i = 0; i < list.size(); i++) { Array.set(array, i, list.get(i)); } return array; } return null; }
private AggregateBinder<?> getAggregateBinder(Bindable<?> target, Context context) { Class<?> resolvedType = target.getType().resolve(Object.class); if (Map.class.isAssignableFrom(resolvedType)) { return new MapBinder(context); } if (Collection.class.isAssignableFrom(resolvedType)) { return new CollectionBinder(context); } if (target.getType().isArray()) { return new ArrayBinder(context); } return null; }