Kotlin SAM私有内部Java接口转换?

考虑下面的Java类:

package javapkg; public class JavaClass { private interface JavaInterface { void foo(); } public void bar(JavaInterface ji) { ji.foo(); } } 

Kotlin代码使用此类的内部接口与SAM转换(请注意, KotlinClass位于不同的包中):

 package kotlinpkg import javapkg.JavaClass class KotlinClass { fun f() { val jc = JavaClass() // Does not compile: // "Cannot access 'JavaInterface': it is private in 'JavaClass'" jc.bar(object : JavaClass.JavaInterface{ override fun foo() { } }) // Compiles and runs fine on Android Nougat, but throws // a NoClassDefFoundError exception on Kitkat jc.bar { } } } 

现在,如果公开内部JavaInterface ,Kotlin代码(包括SAM转换和对象表达式)将在所有平台上正确编译和运行。 由于JavaClassKotlinClass在单独的包中,所以对象表达式无法编译,而且接口是私有的,我猜SAM的转换失败,出于同样的原因运行时异常。

我的问题:为什么SAM转换成功编译? 它似乎不应该是因为接口是私人的,更糟的是它会导致Kitkat运行时异常。 另外,对象表达式不能编译。 这是Kotlin编译器中的一个bug,还是这个故意的?