Я экспериментирую с Kotlin на Android, на Android Studio, смешиваю его с некоторым существующим Java-кодом, и я столкнулся с проблемой.
У меня есть базовый класс в Kotlin с одним помеченным методомкак internal
:
package com.example.kotlin.hellokotlin
open class KotlinBaseClass
{
internal fun doSomething()
{
println("Done something!")
}
}
Затем я создаю класс Kotlin, который расширяет KotlinBaseClass
и вызывает метод базового класса:
package com.example.kotlin.hellokotlin
class KotlinDerivedClass : BaseClass()
{
fun doSomethingElse()
{
doSomething()
println("Done something else!")
}
}
Это компилируется и работает нормально.
Если я сейчас создам Java-класс, который расширяет KotlinBaseClass
, вместо этого он должен быть функционально идентичен KotlinDerivedClass
:
package com.example.kotlin.hellokotlin;
public class JavaDerivedClass extends KotlinBaseClass
{
public void doSomethingElse()
{
doSomething();
System.out.println("Done something else!");
}
}
, я обнаружу, что этот класс не будет компилироваться, потому что метод doSomething()
не может быть решен.Если я уберу ключевое слово internal
из объявления doSomething()
в KotlinBaseClass
, все будет работать.Все классы определены в одном пакете.
Это ожидаемое поведение?Известная проблема с совместимостью между Java и Kotlin?