Introduce Converter.andThen(...)

Closes gh-23379
This commit is contained in:
Josh Cummings
2019-07-29 07:07:57 -06:00
committed by Sam Brannen
parent 8057fb38b2
commit a0c00362c3
2 changed files with 46 additions and 0 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.core.convert.converter;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
* A converter converts a source object of type {@code S} to a target of type {@code T}.
@@ -26,6 +27,7 @@ import org.springframework.lang.Nullable;
* <p>Implementations may additionally implement {@link ConditionalConverter}.
*
* @author Keith Donald
* @author Josh Cummings
* @since 3.0
* @param <S> the source type
* @param <T> the target type
@@ -42,4 +44,20 @@ public interface Converter<S, T> {
@Nullable
T convert(S source);
/**
* Construct a composed {@link Converter} that first applies this {@link Converter} to
* its input, and then applies the {@code after} {@link Converter} to the result.
*
* @since 5.2
* @param <U> the type of output of both the {@code after} {@link Converter} and the
* composed {@link Converter}
* @param after the {@link Converter} to apply after this {@link Converter}
* is applied
* @return a composed {@link Converter} that first applies this {@link Converter} and then
* applies the {@code after} {@link Converter}
*/
default <U> Converter<S, U> andThen(Converter<? super T, ? extends U> after) {
Assert.notNull(after, "after cannot be null");
return (S s) -> after.convert(convert(s));
}
}