Reemplazar SAM-constructor con lambda con tipo covariante

Tengo las siguientes interfaces de Java:

interface Action1<T> { void call(T t); } interface Test<T> { void test(Action1<? super T> action) } 

Y la siguiente class de Kotlin:

 interface A { fun go() } abstract class Main { abstract fun a(): Test<out A> fun main() { a().test(Action1 { it.go() }) a().test { it.go() } } } 

Ahora en la function main , la primera instrucción se comstack, pero IntelliJ da una advertencia de que el constructor SAM puede replacese por una lambda. Esto daría como resultado la segunda statement.

Sin embargo, esta segunda instrucción no comstack, porque tiene el tipo Any? , no A Al eliminar el modificador de out vuelve a comstackr.

¿Por qué pasó esto?


El caso de uso de esto es cuando la class implementadora de Main necesita devolver Test<B> para la function a() , donde B implementa A :

 class B : A { override fun go() { TODO() } } class MainImp : Main() { override fun a(): Test<out A> { val value: Test<B> = object : Test<B> { override fun test(action: Action1<in B>?) { TODO() } }; return value } }