问题标签 [kotlin-interop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
46207 浏览

java - 如何在 Kotlin 中实现这个 Java 接口?

既然 Kotlin 没有原语,那么如何实现这个接口呢?

我无法更改 Java 代码,因为它是二进制库中的已编译类文件。

0 投票
2 回答
13045 浏览

kotlin - 在 kotlin 中将侦听器对象作为函数参数传递

我正在尝试将侦听器从动作传递给类(适配器)。

在 java 中(来自动作的代码):

(来自适配器的代码)

有用。

现在我正在尝试翻译为 kotlin。我首先翻译动作(将动作翻译成 kotlin):

在这一点上仍然有效。适配器的代码仍在 java 中,类的代码在 kotlin 中。现在我将适配器翻译成 kotlin:

现在它不起作用。动作不编译。

错误:无法推断此参数“v”的类型。需要 View.OnClickListener。找到 (???) 单位。

我必须如何在这里做演员?为什么将参数从 kotlin 传递到 java 有效,而从 kotlin 传递到 kotlin 却不行?

0 投票
2 回答
9807 浏览

kotlin - Kotlin 使用 Java 回调接口

我有一个 Web 视图。我想打电话

这种方法。

这是 ValueCallback 接口:

这是我的科特林代码:

有人知道在 kotlin 中重写 onReceiveValue 方法吗?我尝试了“将 Java 转换为 Kotlin”,但结果如下:

谢谢!

0 投票
2 回答
5769 浏览

kotlin - 从 Java 调用 Kotlin 内联函数

例外.kt:

在科特林:

它在 kotlin 中工作,并且函数是内联的。

但是在Java代码中使用时,就是不能内联,仍然是正常的静态方法调用(从反编译的内容看)。

像这样的东西:

0 投票
2 回答
3915 浏览

java - 从 Java 中调用具有类委托的 Kotlin 对象作为静态方法

这可能有点难以描述,所以我将尝试举一个具体的例子来说明我正在尝试做的事情。

假设我们有一个 Facade 接口和类(在 Java 中),像这样:

在我的应用程序中,我需要多个单例来保存外观的一个实例。真正的外观有额外的设置/配置参数,但这些参数在这里无关紧要。

在我开始使用 kotlin 之前,我会有一个类,它包含一个门面的静态实例(不是真正的单例,但在我的情况下,它具有类似的目的),它代理对门面的调用,如下所示:

现在,有了 Kotlin,我们有了类委托,可以让我写这样的东西:

这很棒 - 不再需要样板文件,我可以像调用java 一样SingletonKt 从 KotlinSingleton类调用:

SingletonKt 但是,当我使用from Java时会出现一个小问题。然后我必须指定INSTANCE

我知道@JvmStatic注释,但是我可以将它放在SingletonKt文件中而不会导致编译错误的唯一位置是之前FacadeInterface,它似乎并没有起到作用。

有没有办法设置这个类委托,以便我可以从 Java 调用它,就好像它是一个静态方法一样,而不引入创建代理方法的样板SingletonKt(这会破坏类委托的目的)?

0 投票
3 回答
2072 浏览

kotlin - 从 java 中调用作为 java 中关键字的 kotlin 函数?

由于new不是 kotlin 中的关键字,因此我可以在 kotlin 中具有以下功能。

但是我无法从 java 调用这个函数,因为new它是 java 中的一个关键字。我想知道这个函数在java领域是否有一些别名。我没有找到任何可能是此函数别名的 intellij 建议。

编辑 1

我在 kotlin 中编写了以下代码:

我查看了 java 字节码。如下。

这是反编译成java的字节码:

看来编写一个名为 new 的函数是一个有效的 java 字节码。但是javac不让我编译代码。是否有一些注释或编译器标志我可以启用以javac通过调用此函数来编译 java 文件。

0 投票
3 回答
1224 浏览

java - Kotlin 项目中使用的遗留 Java 库中的空值安全性

假设我在旧/旧 Java 库中有特定代码:

前两个参数使用 @NotNull 和 @Nullable 注释正确注释(使用 jetbrains.annotations)。第三个(unnanotatedString)没有适当的注释。

当我在 Kotlin 代码中使用此类并将所有构造函数参数设置为非空值时,一切都很好:

第一个值是非空的,所以我可以在没有安全调用的情况下访问它。第二个值,我需要使用安全调用(nullableString?.length),如果没有,我有一个编译时错误,到目前为止还不错。在第三个值(unannotatedString)上,我可以在没有安全调用的情况下使用它,它编译得很好。

但是当我将第三个参数设置为“null”时,我没有收到编译时错误(不需要安全调用,只有运行时 NullPointerException:

这是预期的行为吗?Kotlin 的编译器是否将未注释的 Java 方法与使用 @NotNull 注释的方法相同?

0 投票
1 回答
435 浏览

kotlin - 在 Kotlin Javascript 中传递参数时,'x' 不是函数

我不断收到此错误:TypeError: Scraper.dumpTitle is not a function

而且我不知道为什么...

索引.html

主.js

生成的js

笔记

  1. 调用dumpTitle1()工作正常..所以我遇到的问题只是传递参数
  2. 无需指出我可以访问documentKotlin 中的变量而无需传递它,我知道......但我想传递另一个document对象来使用
0 投票
1 回答
295 浏览

kotlin - Kotlin Vertx 类型不匹配发现未来预期的处理程序>

我认为在 Kotlin 中,Unit相当于Void. 使用 Vert.x 服务发现,不可能将 a 传递Future<Unit>unpublish(String id, Handler<AsyncResult<Void>> resultHandler)(给出类型不匹配),但它会Future<Void>毫无问题地接受。为什么会这样,是否有解决方案,或者我只能忍受 using Void

0 投票
1 回答
1590 浏览

kotlin - 用 Kotlin JS 解析 JSON 很有趣解析(文本:字符串):T`?

我该如何使用

fun <T> parse(text: String): T

在 Kotlin JS 中解析 JSON?

例如,我如何解析这个 JSON 字符串?