I’m facing a compilation issue with the following Kotlin code:
fun interface Producer<out R> {
fun produce(): R
fun <T> T.invokeConsumers(
vararg consumers: Consumer<
R /*Type parameter R is declared as 'out' but occurs in 'in' position in type User<R, Producer<R>>*/,
Producer<R>
>
): List<R> =
consumers.map {
it.consume(this@Producer)
}
}
fun interface Consumer<out R, in P : Producer<R>> {
fun consume(p: P): R
}
I am getting compilation error Type parameter R is declared as 'out' but occurs in 'in' position in type User<R, Producer<R>>
, but R
is in out
position in both interfaces.
Why doesn’t it compile?
Also I would like to leave invokeConsumers
function declaration as it is - inside the Producer
interface, as an extension for generic type T