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

kotlin - 用于从子类型推断泛型超类型的 Kotlin 语法

尝试调用期望 aClass作为参数的现有 Java 代码,我在 Kotlin 中尝试了以下代码:

但这不会编译并出现以下错误:

所以我试图强制强制转换(如this answer中所建议):

但这有一个警告:

那么正确的语法是什么?这有关系吗?

0 投票
1 回答
5074 浏览

android - Kotlin dagger 2 Android ViewModel 注入错误

我正在尝试在我的 Android 应用程序上使用 dagger 2 从 arch android 库中注入新的 ViewModel。

从我在这个示例中看到的https://github.com/googlesamples/android-architecture-components/tree/e33782ba54ebe87f7e21e03542230695bc893818/GithubBrowserSample我需要使用这个:

我的工厂是:

但是该项目无法编译:(我有这个错误(没有@Provides-annotated方法就无法提供Map<...>。):

关于如何解决这个问题的任何想法?

0 投票
0 回答
205 浏览

java - Kotlin SAM 转换与私有内部 Java 接口?

考虑以下 Java 类:

Kotlin 代码使用此类的内部接口和 SAM 转换(注意它KotlinClass在不同的包中):

现在,如果您将内部JavaInterface公开,Kotlin 代码(SAM 转换和对象表达式)可以在所有平台上正确编译和运行。对象表达式无法在接口为私有的情况下编译,因为JavaClass并且KotlinClass位于单独的包中,并且我猜测 SAM 转换失败并出现运行时异常也是出于同样的原因。

我的问题:为什么 SAM 转换成功编译?似乎不应该这样做,因为接口是私有的,更糟糕​​的是它会导致 Kitkat 中的运行时异常。此外,对象表达式不会编译。这是 Kotlin 编译器中的错误,还是故意的?

0 投票
1 回答
139 浏览

java - 自己的 SDK 架构 - Kotlin 中的异步方法 API

我们正在为我们的产品构建一个公共 SDK。它是用 Kotlin 构建的,在内部我们使用协程。但是,我们想发布一个可以从 JAVA 中使用的 API,这就是为什么不能提供可暂停功能作为公共 API 的原因。

我们没关系,如果 Java 中的可用性不如 Kotlin 中那么舒服,那也是意料之中的。

因此,例如,我们正在寻找以下异步方法的返回类型:

我们考虑过的事情:

  1. 使用 RX Java 作为接口。我们不喜欢这种解决方案,Rx 相当复杂,我们希望尽可能少地添加其他依赖项。通常,我们会选择返回 Single。但是,我们不想解决的 Rx java 事情(应该完成哪个线程的工作)和 Rx 不解决我们想解决的事情(如果可能的话),例如生命周期和观察者 - 在 Android 架构组件中解决的事情.

  2. Java 8 未来。这似乎是最合适但不可能的,因为我们需要针对较旧的 Android(至少 4.1)。

  3. Android 架构 LiveData。返回 LiveData 似乎没问题,还有一个 observeForever() 方法可以在后台线程中使用。另一方面,api 表明它可能会重复返回多个结果。但是我们绝对希望只忽略结果或一个例外。不过,在 Kotlin 中,我们可以实现扩展函数,这将使其非常像sdk.getPlace().await().

  4. 自定义解决方案:返回一个简单的 Result 对象,您可以通过提供回调订阅结果sdk.getPlace().observe(Observe { onSucccess(data: Place) {} onFailure(e: Throwable) {} });我们将提供等待的扩展功能。

问题:

  1. 我们是否错过了一些重要的方面/图书馆/可能性?
  2. 我们应该选择哪种解决方案以及为什么。
0 投票
1 回答
4340 浏览

java - 是否可以从 Java 访问 Kotlin 类型别名?

假设我有一个typealias像这样的 Kotlin 函数类型的 Kotlin 1.1

我可以从 Java 访问它

是否有可能以Function1Kotlin 类型别名(即Consumer)从 Java 访问 Kotlin 接口?

0 投票
2 回答
88 浏览

dynamic - 如何在 Kotlin 中声明可以是字符串或函数的函数参数?

在以下函数中,我想将 html 标记的属性传递给它。这些属性可以是字符串 ( test("id", "123")) 或函数 ( test("onclick", {_ -> window.alert("Hi!")})):

我试图将参数声明valueAnyKotlin 中的根类型。但是函数不是 type Any。声明类型为dynamic工作,但是

  • dynamic不是一种类型。它只是关闭对参数的输入检查。
  • dynamic仅适用于 kotlin-js (Javascript)。

如何在 Kotlin (Java) 中编写此函数?函数类型与 Any 有什么关系?是否存在同时包含函数类型和 的类型Any

0 投票
2 回答
1797 浏览

date - 如何使用其中的 java Date 对象使 Kotlin 中的数据类不可变?

java.util.Date本身是一个可变对象。因此,即使 Kotlin 数据类(日期字段声明为 val)阻止我更改引用,我也可以修改日期对象本身以更改其值。

我能想出的方法:

使用普通类,覆盖 getter 和 setter。在每次使用 clone 方法来制作给定日期的副本。

我也不能使用copy数据类的方法,因为这些类是休眠实体。所以我需要通过设置器修改它们。

我想为我的实体使用数据类的原因是因为这些实现equals并且hashcode默认情况下。为此,我们一直在 java 中使用 lombok,现在说服团队创建这些方法很困难。即使生成是由 IDE 进行的,它仍然会被检查到源代码控制中。

那么有什么方法可以对数据类逻辑进行自定义设置器。或者我可以为普通类生成equals和hashcode而不用在源代码管理中检查它们的任何方式?

编辑:在评论中指出使用java.time.Instant哪个是不可变的。我面临的问题是这是一个Hibernate Entity Class,我们使用的是hibernate 3.6。hibernate 5.2 提供了即时支持,所以我们落后了,迁移 hibernate 将是一项繁重的任务。我注意到的是,kotlin 数据类确实允许 setter 和 getter 只是以不同的方式。下面的代码:

0 投票
1 回答
971 浏览

java - 你如何使用来自 Kotlin 的 Flowable.generate

这是 Flowable.generate 失败的存根尝试(类型注释比我通常使用的要多):

我想使用的 Java 签名是:

我得到的错误是:

应该为编译器提供什么?

0 投票
2 回答
1871 浏览

javascript - 是否可以使用 Kotlin 构建完整的 Node.js Web 应用程序?

如果我理解正确,随着Kotlin 1.1 的发布,我们可以将 JavaScript 设置为编译目标,以便完全编译为 Kotlin 项目的 JavaScript。仅使用 Kotlin 代码编写整个 Node.js 应用程序(例如快速网络服务器)是否可能(或可行)?

正如这个问题所暗示的,我们可以将 Node 模块导入 Kotlin 类:

...似乎我可以使用以下方法创建应用程序:

这是Kotlin设置快速应用程序的方式吗?或者我应该按照文档中的描述声明一个类:

为 Node.js 应用程序开发设置 Kotlin 项目的规范方法是什么?Kotlin 的 JavaScript 互操作性是否足够强大,可以继续沿着这条路走下去,还是会比它的价值更麻烦?

0 投票
1 回答
641 浏览

javascript - String::toByteArray() 在 Kotlin [js] 中无法编译

以下代码无法在 Kotlin Js 中编译:

任何想法为什么?

返回的错误是:

相同的代码在非 JavaScript Kotlin 编译中编译: