问题标签 [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 回答
156 浏览

kotlin - 如何使用 Java 互操作处理可为空的泛型

我有一个不受我控制的 Java 类,定义为:

我正在尝试从我控制的 Kotlin 文件中使用此类,如下所示:

我收到编译器错误

我明白为什么推断的类型是Array<String?>,但为什么预期的类型不一样?为什么 Kotlin 将 Java 泛型解释为String!而不是String??最后,有没有办法抑制错误?

科特林 1.2.61

0 投票
3 回答
686 浏览

c - 互操作 C 库时出现“未解决的引用”

我正在尝试制作一个在 Kotlin-Native 中读取和执行 C 代码的军国主义示例。我在这里关注这篇文章。但是,我在最后一步收到“未解决的参考”错误。这是我正在使用的所有文件/命令。我的操作系统是Windows。

测试库

测试库

我已经将这些文件编译成一个名为libtestlib.lib. 我的目标是getRandomNumber从 Kotlin Native 内部调用。


接下来我有这些 kotlin 相关文件:

测试库.def

CLibTest.kt


最后,我正在运行这两个命令。第一个制作klib

cinterop -def testlib.def -o testlib


然后最后一个创建可执行文件:

konanc CLibTest.kt -library testlib

一切正常,直到最后一个命令,我收到以下错误:

CLibTest.kt:4:10: error: unresolved reference: getRandomNumber println(getRandomNumber())


有人能指出我哪里出错了吗?

0 投票
12 回答
66660 浏览

java - 比较 kotlin 中的两个列表

我遇到了 kotlin equals函数来比较两个相同类型的列表。它适用于带有数据类的纯 Kotlin。

我在 Kotlin 项目中使用 Java 库,其中回调方法返回 X 秒时间间隔的对象列表。尝试在每次调用时将旧列表与新列表进行比较,但即使项目相同且相等,equals 也会返回 false。

这是因为 Java 库中的 equals 方法吗?

列表比较的替代建议将不胜感激。

0 投票
1 回答
1682 浏览

java - 如何在 Kotlin 生成的 Java 代码中禁用 @NonNull/@Nullable 注释

我需要@NonNull/@Nullable在 Kotlin 生成的 Java 代码中禁用注释,因为某些注释适配器(代码生成器)无法正确处理某些带注释的字段

你知道怎么做吗?一些 Kotlin 注释或编译器指令

问题:科特林类:

生成的java:

我要删除:@org.jetbrains.annotations.NotNull()注释

0 投票
1 回答
616 浏览

kotlin - 为什么 Kotlin 不能推断比较器的类型

阅读关于SAM Conversions的 Java 互操作文档,我期望 Kotlin 函数

Collections.sortWith(comparator: kotlin.Comparator<in T> /* = java.util.Comparator<in T> */)

能够在不需要显式指定参数的情况下采用 lambda 函数是 Comparator。但是,以下代码给出type inference failed

然而:

编译并正确运行

0 投票
1 回答
282 浏览

kotlin - Kotlin lambda / Java SAM互操作 - 类型不匹配

我有一个现有的 Java 接口定义如下

并希望根据我的理解定义一个持有符合 SAM 转换的 Kotlin lambda 的变量

但相反,我得到一个类型不匹配的错误。

lambda 实际上与 Java 函数定义匹配,我在这里缺少什么?

0 投票
2 回答
2193 浏览

kotlin - Kotlin 与 Objective-C 框架的多平台/原生互操作性

我正在尝试在多平台项目中从 Kotlin 调用 Swift/Objective-C 代码。调用平台代码没有问题。但是,当我尝试调用某个库(或框架,由于我不是 iOS 开发人员而不确定如何正确调用它)时,它会失败。文档指出,如果正确导出,可以调用 Objective-C 代码和 Swift:

Kotlin/Native 提供与 Objective-C 的双向互操作性。如果将 Objective-C 框架和库正确导入构建(默认导入系统框架),则可以在 Kotlin 代码中使用 Objective-C 框架和库。请参阅 Gradle 插件文档中的“使用 cinterop”。如果使用 @objc 将 Swift 库的 API 导出到 Objective-C,则可以在 Kotlin 代码中使用 Swift 库。尚不支持纯 Swift 模块。

但它没有说明如何正确导入它们。它仅指向描述旧版本 gradle 插件的 gradle插件描述。所以它对我不起作用。最后我想出了一些可能是导入Objective-C代码的方法:

构建运行没有失败,但它不导入任何东西。我究竟做错了什么?是否可以导入这样的库?

升级版:

在这里,cinterop我找到了一个这样的使用工具示例:

看起来cinterop工具应该/dist/bin/在我的项目的文件夹中,但没有这样的文件夹。我在哪里获得cinterop工具?

0 投票
1 回答
1625 浏览

kotlin - Kotlin 本机互操作链接器找不到框架

我正在尝试在 Kotlin Multiplatform 项目中使用 cocoapods 框架。所以我

  • 将框架添加到 Pods 文件。
  • 运行 pod 安装。
  • 创建的.def文件
  • 在里面添加了cinterop配置build.gradle

./gradlew cinteropFirebaseIos成功运行。它生成.klib,所以我可以看到 kotlin 代码中的类。但是当我尝试运行 iOS 应用程序构建失败并显示消息:

显示最近的消息

> 任务:app:linkDebugFrameworkIos

ld:找不到框架 FirebaseDatabase

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld 调用报错

这是我的配置build.gradle

这是我的.def文件:

在此处输入图像描述

我怎样才能找出问题所在?我错过了.def文件中的某些内容吗?在build.gradle?

0 投票
0 回答
46 浏览

java - 尝试访问枚举中名为“name”的字段时,Kotlin 解析不明确

Kotlin 无法访问 java 枚举中的字段,因为它被称为 name,它与 Kotlin 的枚举定义中的 name 变量冲突,如以下问题所示: Conflicting 'name' declaration in enum

该问题的解决方案是编辑枚举,但我无法编辑此 Java 枚举。

如何解决 Kotlin 的歧义以便我可以访问名称字段?

0 投票
1 回答
51 浏览

kotlin - kotlin:如何重载导入的函数

我使用assertj。除其他外,它具有功能assertThat(int)assertThat(Object). 我想添加我自己的功能

但后来似乎我不能轻易使用它。当我在测试类之外声明函数时,测试MyTest中的函数调用绑定到assertThat(Object)而不是assertThat(Flux)

我应该怎么做才能使用我的功能?