【发布时间】:2018-10-18 22:59:36
【问题描述】:
我正在 Android 上使用 Kotlin 进行试验,使用 Android Studio,将它与一些现有的 Java 代码混合,我遇到了一个问题。
我在 Kotlin 中有一个基类,其中一个方法标记为 internal:
package com.example.kotlin.hellokotlin
open class KotlinBaseClass
{
internal fun doSomething()
{
println("Done something!")
}
}
然后我创建一个扩展 KotlinBaseClass 的 Kotlin 类并调用基类方法:
package com.example.kotlin.hellokotlin
class KotlinDerivedClass : BaseClass()
{
fun doSomethingElse()
{
doSomething()
println("Done something else!")
}
}
这可以编译并正常工作。
如果我现在创建一个扩展 KotlinBaseClass 的 Java 类,旨在在功能上与 KotlinDerivedClass 相同:
package com.example.kotlin.hellokotlin;
public class JavaDerivedClass extends KotlinBaseClass
{
public void doSomethingElse()
{
doSomething();
System.out.println("Done something else!");
}
}
我发现这个类不会编译,因为方法doSomething()无法解析。如果我从KotlinBaseClass 中doSomething() 的声明中删除internal 关键字,则一切正常。所有类都定义在同一个包中。
这是预期的行为吗? Java 和 Kotlin 之间的互操作性的已知问题?
【问题讨论】: