/** * <p>Resolve the given property for the given name, type and generic type arguments.</p> * <p> * <p>Implementers can choose to implement more intelligent type conversion by analyzing the typeArgument.</p> * * @param name The name * @param requiredType The required type * @param context The {@link ConversionContext} to apply to any conversion * @param <T> The concrete type * @return An optional containing the property value if it exists */ default <T> Optional<T> getProperty(String name, Class<T> requiredType, ConversionContext context) { return getProperty(name, context.with(Argument.of(requiredType))); }
Optional<Argument<?>> firstTypeVariable = context.getFirstTypeVariable(); Argument<?> argument = firstTypeVariable.orElse(Argument.OBJECT_ARGUMENT); Optional converted = DefaultConversionService.this.convert(object, context.with(argument)); if (converted.isPresent()) { return Optional.of(Collections.singletonList(converted.get())); Optional<Argument<?>> typeVariable = context.getFirstTypeVariable(); Argument<?> componentType = typeVariable.orElse(Argument.OBJECT_ARGUMENT); ConversionContext newContext = context.with(componentType); Class<?> targetComponentType = ReflectionUtils.getWrapperType(componentType.getType()); ConversionContext newContext = context.with(componentType); Optional converted = convert(object, targetComponentType, newContext); if (converted.isPresent()) { Class<?> targetComponentType = ReflectionUtils.getWrapperType(componentType.getType()); ConversionContext newContext = context.with(componentType); if (targetType.isInstance(object)) { if (targetComponentType == Object.class) { Class keyType = keyArgument.getType(); Class valueType = valArgument.getType(); ConversionContext keyContext = context.with(keyArgument); ConversionContext valContext = context.with(valArgument);