可以从Java代码访问扩展函数吗?
我在Kotlin文件中定义了扩展函数。
其中MyModel是(生成的) java类。现在,我想在我的普通java代码中访问它:
然而,这并不起作用。集成开发环境将无法识别bar()方法,编译将失败。
与kotlin的静态函数一起使用是可行的:
通过使用import com.test.extensions.ExtensionsPackage使我的集成开发环境看起来配置正确。
我从kotlin文档中搜索了整个Java-interop文件,也用谷歌搜索了很多次,但我没有找到它。
我做错了什么?这有可能吗?
发布于 2015-02-06 19:39:59
默认情况下,在文件中声明的所有Kotlin函数都将被编译为同一包中类中的静态方法,并使用从Kotlin源文件派生的名称(第一个字母大写,".kt“扩展名替换为"Kt”后缀)。为扩展函数生成的方法将具有扩展函数接收器类型的附加第一个参数。
将其应用于原始问题,Java编译器将看到名为example.kt的Kotlin源文件
就像声明了下面的Java类一样
从Java的角度来看,扩展类没有发生任何事情,所以不能只使用点语法来访问这些方法。但是它们仍然可以像普通的Java静态方法一样被调用:
静态导入可用于ExampleKt类:
发布于 2016-04-06 21:21:36
Kotlin顶级扩展函数被编译为Java静态方法。
给定foo.bar包中包含以下内容的Kotlin文件Extensions.kt:
等效的Java代码为:
除非,也就是说,Extensions.kt包含以下代码行
在这种情况下,Java static类将被命名为DemoUtils
在Kotlin中,可以用其他方式声明扩展方法。(例如,作为成员函数或作为伴生对象的扩展。)
发布于 2018-10-01 21:50:23
我有一个名为NumberFormatting.kt的Kotlin文件,它具有以下函数
在java中,在所需的导入import ....extensions.NumberFormattingKt;之后,我可以通过以下方式简单地访问文件NumberFormattingKt
https://stackoverflow.com/questions/28294509
复制相似问题