首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java访问Kotlin扩展函数

从Java访问Kotlin扩展函数
EN

Stack Overflow用户
提问于 2015-02-03 16:37:56
回答 10查看 56.7K关注 0票数 204

可以从Java代码访问扩展函数吗?

我在Kotlin文件中定义了扩展函数。

其中MyModel是(生成的) java类。现在,我想在我的普通java代码中访问它:

然而,这并不起作用。集成开发环境将无法识别bar()方法,编译将失败。

与kotlin的静态函数一起使用是可行的:

通过使用import com.test.extensions.ExtensionsPackage使我的集成开发环境看起来配置正确。

我从kotlin文档中搜索了整个Java-interop文件,也用谷歌搜索了很多次,但我没有找到它。

我做错了什么?这有可能吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2015-02-06 19:39:59

默认情况下,在文件中声明的所有Kotlin函数都将被编译为同一包中类中的静态方法,并使用从Kotlin源文件派生的名称(第一个字母大写,".kt“扩展名替换为"Kt”后缀)。为扩展函数生成的方法将具有扩展函数接收器类型的附加第一个参数。

将其应用于原始问题,Java编译器将看到名为example.kt的Kotlin源文件

就像声明了下面的Java类一样

从Java的角度来看,扩展类没有发生任何事情,所以不能只使用点语法来访问这些方法。但是它们仍然可以像普通的Java静态方法一样被调用:

静态导入可用于ExampleKt类:

票数 289
EN

Stack Overflow用户

发布于 2016-04-06 21:21:36

Kotlin顶级扩展函数被编译为Java静态方法。

给定foo.bar包中包含以下内容的Kotlin文件Extensions.kt

等效的Java代码为:

除非,也就是说,Extensions.kt包含以下代码行

在这种情况下,Java static类将被命名为DemoUtils

在Kotlin中,可以用其他方式声明扩展方法。(例如,作为成员函数或作为伴生对象的扩展。)

票数 38
EN

Stack Overflow用户

发布于 2018-10-01 21:50:23

我有一个名为NumberFormatting.kt的Kotlin文件,它具有以下函数

在java中,在所需的导入import ....extensions.NumberFormattingKt;之后,我可以通过以下方式简单地访问文件NumberFormattingKt

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28294509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档