@SuppressWarnings("deprecation")
    @Override
    public <VR, KO, VO> KTable<K, VR> leftJoin(final KTable<KO, VO> other,
                                               final Function<V, KO> foreignKeyExtractor,
                                               final ValueJoiner<V, VO, VR> joiner,
                                               final Named named) {
        return doJoinOnForeignKey(
            other,
            foreignKeyExtractor,
            joiner,
            TableJoined.as(new NamedInternal(named).name()),
            Materialized.with(null, null),
            true
        );
    }
We conflate V with Change<V> in many places. This will get fixed in the implementation of KIP-478.
For now, I'm just explicitly lying about the parameterized type.
streams/src/main/java/org/apache/kafka/streams/kstream/internals/KTableImpl.java