#kotlin
#kotlin
Вопрос:
Можно ли получить доступ к функциям расширения из кода Java?
Я определил функцию расширения в файле Kotlin.
package com.test.extensions
import com.test.model.MyModel
/**
*
*/
public fun MyModel.bar(): Int {
return this.name.length()
}
Где MyModel — это (сгенерированный) класс Java. Теперь я хотел получить к ней доступ в моем обычном Java-коде:
MyModel model = new MyModel();
model.bar();
Однако это не работает. Среда IDE не распознает метод bar(), и компиляция завершается с ошибкой.
Что действительно работает, так это использование статической функции из kotlin:
public fun bar(): Int {
return 2*2
}
с помощью импорта com.test.extensions.ExtensionsPackage итак, моя IDE, похоже, настроена правильно.
Я просмотрел весь файл Java-interop из документов kotlin, а также много гуглил, но не смог его найти.
Что я делаю не так? Возможно ли это вообще?
Ответ №1:
Возможно, так:
// CallExtensionFunction.java
package com.example.groundup;
public class CallExtensionFunction {
public static void main(String[] args) {
MyModel myModel = new MyModel();
int bar = MyModelKt.bar(myModel);
System.out.println(bar);
}
}
// MyModell.kt
package com.example.groundup
fun MyModel.bar(): Int {
return this.name.length
}
class MyModel() {
val name = "Hugo"
}
Функция расширения предоставляется в соответствующем синглтоне с суффиксом «Kt» в качестве статического метода.