问题标签 [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.
kotlin - 如何使用 Java 互操作处理可为空的泛型
我有一个不受我控制的 Java 类,定义为:
我正在尝试从我控制的 Kotlin 文件中使用此类,如下所示:
我收到编译器错误
我明白为什么推断的类型是Array<String?>
,但为什么预期的类型不一样?为什么 Kotlin 将 Java 泛型解释为String!
而不是String?
?最后,有没有办法抑制错误?
科特林 1.2.61
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())
有人能指出我哪里出错了吗?
java - 比较 kotlin 中的两个列表
我遇到了 kotlin equals函数来比较两个相同类型的列表。它适用于带有数据类的纯 Kotlin。
我在 Kotlin 项目中使用 Java 库,其中回调方法返回 X 秒时间间隔的对象列表。尝试在每次调用时将旧列表与新列表进行比较,但即使项目相同且相等,equals 也会返回 false。
这是因为 Java 库中的 equals 方法吗?
列表比较的替代建议将不胜感激。
java - 如何在 Kotlin 生成的 Java 代码中禁用 @NonNull/@Nullable 注释
我需要@NonNull/@Nullable
在 Kotlin 生成的 Java 代码中禁用注释,因为某些注释适配器(代码生成器)无法正确处理某些带注释的字段
你知道怎么做吗?一些 Kotlin 注释或编译器指令
问题:科特林类:
生成的java:
我要删除:@org.jetbrains.annotations.NotNull()
注释
kotlin - 为什么 Kotlin 不能推断比较器的类型
阅读关于SAM Conversions的 Java 互操作文档,我期望 Kotlin 函数
Collections.sortWith(comparator: kotlin.Comparator<in T> /* = java.util.Comparator<in T> */)
能够在不需要显式指定参数的情况下采用 lambda 函数是 Comparator。但是,以下代码给出type inference failed
:
然而:
编译并正确运行
kotlin - Kotlin lambda / Java SAM互操作 - 类型不匹配
我有一个现有的 Java 接口定义如下
并希望根据我的理解定义一个持有符合 SAM 转换的 Kotlin lambda 的变量
但相反,我得到一个类型不匹配的错误。
lambda 实际上与 Java 函数定义匹配,我在这里缺少什么?
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
工具?
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
?
java - 尝试访问枚举中名为“name”的字段时,Kotlin 解析不明确
Kotlin 无法访问 java 枚举中的字段,因为它被称为 name,它与 Kotlin 的枚举定义中的 name 变量冲突,如以下问题所示: Conflicting 'name' declaration in enum
该问题的解决方案是编辑枚举,但我无法编辑此 Java 枚举。
如何解决 Kotlin 的歧义以便我可以访问名称字段?
kotlin - kotlin:如何重载导入的函数
我使用assertj。除其他外,它具有功能assertThat(int)
和assertThat(Object)
. 我想添加我自己的功能
但后来似乎我不能轻易使用它。当我在测试类之外声明函数时,测试MyTest
中的函数调用绑定到assertThat(Object)
而不是assertThat(Flux)
:
我应该怎么做才能使用我的功能?