private static Object getListValue( Class<?> beanClass, Type parameterType, Class<?> parameterClass, Config config, String configPropName) { Type elementType = ((ParameterizedType) parameterType).getActualTypeArguments()[0]; if (elementType == Boolean.class) { return config.getBooleanList(configPropName); } else if (elementType == Integer.class) { return config.getIntList(configPropName); } else if (elementType == Double.class) { return config.getDoubleList(configPropName); } else if (elementType == Long.class) { return config.getLongList(configPropName); } else if (elementType == String.class) { return config.getStringList(configPropName); } else if (elementType == Duration.class) { return config.getDurationList(configPropName); } else if (elementType == ConfigMemorySize.class) { return config.getMemorySizeList(configPropName); } else if (elementType == Object.class) { return config.getAnyRefList(configPropName); } else if (elementType == Config.class) { return config.getConfigList(configPropName); } else if (elementType == ConfigObject.class) { return config.getObjectList(configPropName); } else if (elementType == ConfigValue.class) { return config.getList(configPropName); } else if (hasAtLeastOneBeanProperty((Class<?>) elementType)) { List<Object> beanList = new ArrayList<Object>(); List<? extends Config> configList = config.getConfigList(configPropName); for (Config listMember : configList) { beanList.add(createInternal(listMember, (Class<?>) elementType)); } return beanList; } else { throw new ConfigException.BadBean( "Bean property '" + configPropName + "' of class " + beanClass.getName() + " has unsupported list element type " + elementType); } }