问题标签 [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 投票
1 回答
598 浏览

kotlin - 有没有办法在 Kotlin 单例对象上隐藏实例变量

如果我有这样的代码

是否可以隐藏ObjectTest.INSTANCEKotlin 自动生成的变量?我不希望该对象可以通过实例访问,它也不具有任何实例方法,因此该INSTANCE变量只会污染自动完成功能,可能会让潜在用户感到困惑(此代码适用于将被其他人使用的库) .

0 投票
1 回答
16657 浏览

kotlin - 类不是抽象的,不实现抽象基类成员

我对这个 Kotlin 错误感到困惑,该错误与为从 maven 包导入的抽象类提供实现相关联。

我有一个用 Kotlin 编写的 maven 库,它公开了一个名为 APIGatewayRequestHandler 的抽象类。在我导入库的应用程序中,我提供了抽象类的实现:

库中反编译的抽象类如下所示:

我收到以下错误:

0 投票
1 回答
348 浏览

java - 使用 ASM 从 Java 库中对 Kotlin 类进行代理

我有一个使用 ASM 创建代理的 Java 库。

有一次,用户向它发送了一个 Kotlin 类。我可以检测到它是来自 Java 的 Kotlin 类,但我不知道如何从中制作代理?我从这样的课上读到的一切都是毫无意义的。

场景如下

  • 用户发送一个 Kotlin 类
  • 我做代理
  • 最后,我做了一个这样的类的实例

最好的方法是什么?

编辑

我刚刚意识到我不能覆盖 Kotlin 函数的原因之一是因为它们是作为final字节码中的方法生成的。有没有办法告诉 Kotlin 不要这样做?

0 投票
0 回答
64 浏览

kotlin - Cannot return and assign multiple values in kotlin

I am new to Kotlin and I wanted to return multiple values from a function.

I checked this post:

How do we return multiple values from a function in Kotlin like we do in swift? I am using a recursion function where I don't have to use var or val when getting return values.

My Code:

But at (size,length) = folderSizeInBytes(file) there is an error, saying there is unexpected tokens. Is it possible to do this without recreating size and length or a Pair object?

0 投票
1 回答
910 浏览

groovy - 带有接收器的 Kotlin 函数参数,从 Groovy 调用

Kotlin 和 Groovy 都提供了一种编写高阶函数的方法,其中函数参数具有隐式接收器。

Kotlin 版本

Groovy 版本

我的目标是在 Kotlin 中编写withReceiver函数,但从 groovy 调用它并开始{ hello() }工作。不过,正如所写,Kotlin 会生成类似的字节码

Groovy 将其视为带有参数的函数。换句话说,withReceiver要从 Groovy 调用 Kotlin,我必须这样做:

为了允许{ hello() }no it -> it.,我必须添加一个以 agroovy.lang.Closure作为参数的重载。

Kotlin 版本

有了这个重载,给定一个名为以下行的KotlinVersion实例适用于两种语言:foo

我试图保留这种语法,但避免为我的 Kotlin 库定义的每个高阶函数编写额外的样板重载。是否有更好(更无缝/自动)的方式使 Kotlin 的函数与接收器语法可从 Groovy 中使用,这样我就不必手动为我的每个 Kotlin 函数添加样板重载?

上面我的玩具示例的完整代码和编译说明在 gitlab 上

0 投票
4 回答
1524 浏览

kotlin - 我们可以使用两个变量交换 kotlin 中的两个数字并从用户那里获取输入吗?

我通过以下程序进行了尝试,但它显示了预期 kotlin 变量的错误:

[在此处输入图像描述

0 投票
1 回答
904 浏览

clojure - 如何在 Kotlin 中运行 Clojure?

是否可以在 kotlin 中运行 clojure?春天更具体?

我在 clojure 中制作了刮刀,我想在用 kotlin 编写的 Web 应用程序上使用它们。在 kotlin 中看起来如何?编码..

0 投票
1 回答
1545 浏览

java - 在 Kotlin 中实现 (/inherit/~extend) 注解

在 Java 中,我可以“实现”注释。

示例 Java 注释:

示例 Java“实现”:

尝试将其移植到 Kotlin 不起作用,因为它说注释是最终的,因此不能被继承,即以下内容不起作用:

你如何以 Kotlin 的方式“实现/扩展”注释?找不到 Kotlin 在这方面与 Java 不同的任何原因。欢迎任何提示如何解决该问题或任何说明为什么会这样的来源。

以下问题包含此星座的用例:Dynamically fire CDI event with qualifier with members。基本上你需要这样的东西来缩小应该根据其成员触发的限定符。

请注意,这也适用于 Kotlin 注释,并且似乎 Kotlin 注释无法打开,因此也无法实现/扩展。

到目前为止,我发现的是@Inherited一个问题:

但是我没有找到任何注释为什么不能像在 Java 中那样实现/继承的原因。

我现在在这里也问了这个问题:https ://discuss.kotlinlang.org/t/implement-inherit-extend-annotation-in-kotlin/8916

更新:最后我发现了一些关于这个设计决策的东西,即以下问题(当我为它打开我自己的问题时):注释继承。要么禁止,要么正确实施。看起来该决定是“禁止”它,即使没有(可见的?)关于该决定的评论、讨论或其他来源。

添加了以下问题:https ://youtrack.jetbrains.com/issue/KT-25947

0 投票
2 回答
451 浏览

java - 将 vararg 参数传递给 Kotlin 中的另一个函数时出现编译时错误

我试图接受一个可变参数作为 Kotlin 中的函数参数,并尝试将它传递给另一个带有可变参数的函数。但是,这样做会给我一个编译时错误,type mismatch: inferred type is IntArray but Int was expected.

科特林:

但是,如果我在 Java 中尝试相同的代码,它就可以工作。

爪哇:

我怎样才能解决这个问题?

0 投票
1 回答
198 浏览

inheritance - 如何在 kotlin 中使用成员定义类可以在 java 派生类中访问

在 kotlin 中定义了一个类,其中包含成员

但是当在java中试图扩展这个类并访问它的成员时会出错。

在 java 中想要从 ViewDelegateImp 派生,并覆盖 var layoutId 并使用受保护的 val clickHandler