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

kotlin - Java -> Kotlin 与原始类型的转换

我正在编写CRaSH插件,它在 Java 中看起来像

但是,我想用 Kotlin 来表达这个类。问题是AuthenticationPlugin哪个具有通用参数。省略 is 会导致 Kotlin 编译失败,所以我使用了星形投影,比如

编译得很好,但不幸的是,CRaSH 似乎使用它自己的加载插件的方式,我得到了运行时异常

实际上,Java 版本的输入resolveToClass()是“Class@interface org.crsh.auth.AuthenticationPlugin”,而 Kotlin 的输入是“ParametrizedTypeImpl@org.crsh.auth.AuthenticationPlugin”。我认为 CRaSH 加载程序无法正确处理此问题。我当然可以只使用 Java,但为了坚持使用 Kotlin - 我怎样才能使这个类编译为与 Java 版本完全相同的类型并使其由 CRaSH 正确加载?

0 投票
3 回答
5162 浏览

java - 从 Java 调用 Kotlin -- 错误:包演示不存在

我不明白文档

包级函数

在包 org.foo.bar 内的文件 example.kt 中声明的所有函数和属性,包括扩展函数,都被编译为名为 org.foo.bar.ExampleKt 的 Java 类的静态方法。

我的代码如下。

编译错误;构建失败:

java源码:

科特林来源:

项目:

0 投票
1 回答
3850 浏览

java - Kotlin 未解决的参考:CLI 上来自 gradle 的 println

println在 kotlin 函数之前放置一个语句会返回崩溃。堆栈跟踪:

取出违规行,成功输出:

爪哇:

科特林:

构建文件:

环境:

项目:

它尽可能简单,Java 调用 Kotlin。不知道我还能如何简化它。这是版本问题??

当我使用 netbeans 时,gradle 纯粹是从 CLI 运行的。如果证明有用的话,我什至可以删除 NB 文件。

可能我只是没有正确打印到控制台。

0 投票
1 回答
438 浏览

kotlin - 智能投射无法按预期工作

我有以下 Kotlin 代码:

它接受一个对象,检查它是否是一个集合,如果是,则接受一个项目来检查集合项目的类,从一个名为 ObjectBox 的数据库中创建一个 Box,然后将项目列表放入数据库。

但是,我在 Box.put 语句中收到以下错误:

我要使用的方法的签名是:

它接收一个泛型类型的集合,因为列表是一个集合,它应该可以工作。

我也明确地将它转换为一个列表,但它仍然说了同样的话。

谢谢!

0 投票
2 回答
959 浏览

android - 如何在 Java 中轻松使用 Kotlin 通道生产者?

作为开发新 API 的一部分,我正在学习使用 Kotlin。最初我希望在 Java (Android) 项目中使用 Kotlin API,但从长远来看,我希望完全采用 Kotlin。

作为改进长期运行过程的实现的一部分,我想使用协程。具体来说,包中的频道生产者kotlinx.coroutines

例如:

在 Java 中使用它的最佳方法是什么?我可以向 Kotlin 和/或 Java 添加临时的“帮助”函数。

0 投票
3 回答
1360 浏览

kotlin - Kotlin - 安全呼叫运算符的链接。不必要的接线员电话

以下面使用安全调用运算符 (?.) 的示例为例:

我了解我们需要在 sampleB 上使用安全的呼叫操作员。但是为什么我们需要sampleC 上的安全调用运算符。如果我删除该运算符,它不会编译。

根据我对运算符的理解,如果 sampleB 为 null,则该行返回 null。如果 sampleB 不为空,我们可以根据它的类型确定 sampleC 不为空。但是为什么 Kotlin 会在 sampleC 上强制使用安全调用运算符?

0 投票
3 回答
1616 浏览

android - Kotlin 文件无法使用 R.java

我在相应的资源文件夹中创建了一个新的布局文件。同步后,当我尝试引用布局文件时,即 R.layout.activity_test,R 是“未解析符号”。当我尝试在 AS 中构建时,它失败了。

有趣的是,如果我手动导入 R 文件并在代码中使用它,当我尝试在命令行上构建时,它可以工作。另一件事是当我尝试在 Java 文件中使用 R 访问布局文件时,它也可以工作。所以我知道正在生成 R.java。

我尝试创建一个全新的项目,并且可以在 Kotlin 文件中访问 R。

这里有什么问题?

我尝试过的事情:

  • 清洁然后建造

  • 无效的缓存/重新启动

  • 吹走 .gradle 文件夹并重新创建索引

其他信息:

  • 作为 v3.0.1

  • 尝试了 Kotlin v1.1.2-4 和 v1.1.60

  • Gradle v4.2.1

  • Gradle 插件 v3.0.0

0 投票
1 回答
74 浏览

android - 为什么有些 Java setter 方法会自动成为 Kotlin 属性,而有些则不会?

例如这个WebSettings Java 类。

它有一个 Java 方法setJavaScriptEnabled(boolean)可以转换为 Kotlin 属性javaScriptEnabled,如下所示,但也有setSupportZoom(boolean)一个不会转换为 Kotlin 属性的方法supportZoom

0 投票
1 回答
1794 浏览

sqlite - 如何在 Kotlin/Native 中使用 SQLite?

对于多平台项目,我考虑Kotlin/Native,希望至少在业务逻辑和数据保存方面有一个通用的代码库。

为了保存数据,我想使用 SQLite 之类的数据库。但是,根据另一个 stackoverflow 线程,如果我想编译为 Kotlin/Native,我不能使用任何 Java 文件。如果我理解正确,这也意味着我包含的任何 SQLite 库都不允许从 Java 导入。

在搜索这样的库时,我发现了 Jetbrain 的两个有趣的数据库项目,即Anko SQLiteExposed。然而,在挖掘他们的源代码时,在撰写本文时,两者都是从 Java 导入的(例如 java.sql)。这可能意味着我不能使用它们。

我的一个想法是使用基于c 的 sqlite库,因为根据提到的线程,允许 Kotlin/Native 代码使用 c 库。这可能是可能的,但我想知道是否没有建议的更像 Kotlin 的方式在 Kotlin/Native 中使用 SQLite 或其他数据库?

0 投票
0 回答
777 浏览

lambda - 数据绑定:具有 lambda 值的 ObservableField 无法编译

我试图View通过计算将一个参数作为参数的 lambda 来定义 的可见性。我正在使用 Kotlin,顺便说一句。

在我的ViewModel我有:

的绑定表达式View如下:

vm并在布局title的标签中正确声明为变量。data

在编译时,我得到两个错误:

1)不兼容的类型:Object不能转换为Function1

2)不兼容的类型:Object不能转换为Integer

第一类错误只有一个,第二类错误有几个。第二种错误的数量与布局xml文件中lambda的调用次数相同。

我解决问题的尝试:

显然,类型 1 的错误可以通过重写 的get()方法来解决ObservableField(使方法Function1显式返回)。这可行,但很难看,编译器在推断customerPropVisibility. 毫无疑问,这里出了点问题。

类型 2 的错误对我来说是个谜,因为函数类型(我的 lambda)显式返回 Int。

我认为这与 Kotlin/Java 互操作性有关。

如果你偶然发现了同样的问题,请分享解决它的经验。

编辑:

由于此错误尚未解决,因此我使用稍微不同的方法来实现相同的结果:

我没有将 的值设置ObservableField为 lambda,而是将其设置为函数引用 ( ::getVisibility),如下所示:

每当propVisibilityValues我通知更改时propVisibilityGetter

在 XML 布局文件中,绑定表达式如下所示:

总体结果:视图模型中的混乱,但干净的绑定表达式。