public static <K, V, VO> Joined<K, V, VO> with(final Serde<K> keySerde,
                                                   final Serde<V> valueSerde,
                                                   final Serde<VO> otherValueSerde,
                                                   final String name,
                                                   final Duration gracePeriod) {
        return new Joined<>(keySerde, valueSerde, otherValueSerde, name, gracePeriod);
    }
Create an instance of {@code Joined} with key, value, and otherValue {@link Serde} instances.
{@code null} values are accepted and will be replaced by the default serdes as defined in
config.

@param keySerde the key serde to use. If {@code null} the default key serde from config will be
used
@param valueSerde the value serde to use. If {@code null} the default value serde from config
will be used
@param otherValueSerde the otherValue serde to use. If {@code null} the default value serde
from config will be used
@param name the name used as the base for naming components of the join including any
repartition topics
@param gracePeriod stream buffer time
@param <K> key type
@param <V> value type
@param <VO> other value type
@return new {@code Joined} instance with the provided serdes
streams/src/main/java/org/apache/kafka/streams/kstream/Joined.java