问题标签 [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 - 用于从子类型推断泛型超类型的 Kotlin 语法
尝试调用期望 aClass
作为参数的现有 Java 代码,我在 Kotlin 中尝试了以下代码:
但这不会编译并出现以下错误:
所以我试图强制强制转换(如this answer中所建议):
但这有一个警告:
那么正确的语法是什么?这有关系吗?
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<...>。):
关于如何解决这个问题的任何想法?
java - Kotlin SAM 转换与私有内部 Java 接口?
考虑以下 Java 类:
Kotlin 代码使用此类的内部接口和 SAM 转换(注意它KotlinClass
在不同的包中):
现在,如果您将内部JavaInterface
公开,Kotlin 代码(SAM 转换和对象表达式)可以在所有平台上正确编译和运行。对象表达式无法在接口为私有的情况下编译,因为JavaClass
并且KotlinClass
位于单独的包中,并且我猜测 SAM 转换失败并出现运行时异常也是出于同样的原因。
我的问题:为什么 SAM 转换成功编译?似乎不应该这样做,因为接口是私有的,更糟糕的是它会导致 Kitkat 中的运行时异常。此外,对象表达式不会编译。这是 Kotlin 编译器中的错误,还是故意的?
java - 自己的 SDK 架构 - Kotlin 中的异步方法 API
我们正在为我们的产品构建一个公共 SDK。它是用 Kotlin 构建的,在内部我们使用协程。但是,我们想发布一个可以从 JAVA 中使用的 API,这就是为什么不能提供可暂停功能作为公共 API 的原因。
我们没关系,如果 Java 中的可用性不如 Kotlin 中那么舒服,那也是意料之中的。
因此,例如,我们正在寻找以下异步方法的返回类型:
我们考虑过的事情:
使用 RX Java 作为接口。我们不喜欢这种解决方案,Rx 相当复杂,我们希望尽可能少地添加其他依赖项。通常,我们会选择返回 Single。但是,我们不想解决的 Rx java 事情(应该完成哪个线程的工作)和 Rx 不解决我们想解决的事情(如果可能的话),例如生命周期和观察者 - 在 Android 架构组件中解决的事情.
Java 8 未来。这似乎是最合适但不可能的,因为我们需要针对较旧的 Android(至少 4.1)。
Android 架构 LiveData。返回 LiveData 似乎没问题,还有一个 observeForever() 方法可以在后台线程中使用。另一方面,api 表明它可能会重复返回多个结果。但是我们绝对希望只忽略结果或一个例外。不过,在 Kotlin 中,我们可以实现扩展函数,这将使其非常像
sdk.getPlace().await()
.自定义解决方案:返回一个简单的 Result 对象,您可以通过提供回调订阅结果
sdk.getPlace().observe(Observe { onSucccess(data: Place) {} onFailure(e: Throwable) {} })
;我们将提供等待的扩展功能。
问题:
- 我们是否错过了一些重要的方面/图书馆/可能性?
- 我们应该选择哪种解决方案以及为什么。
java - 是否可以从 Java 访问 Kotlin 类型别名?
假设我有一个typealias
像这样的 Kotlin 函数类型的 Kotlin 1.1
我可以从 Java 访问它
是否有可能以Function1
Kotlin 类型别名(即Consumer
)从 Java 访问 Kotlin 接口?
dynamic - 如何在 Kotlin 中声明可以是字符串或函数的函数参数?
在以下函数中,我想将 html 标记的属性传递给它。这些属性可以是字符串 ( test("id", "123")
) 或函数 ( test("onclick", {_ -> window.alert("Hi!")})
):
我试图将参数声明value
为Any
Kotlin 中的根类型。但是函数不是 type Any
。声明类型为dynamic
工作,但是
dynamic
不是一种类型。它只是关闭对参数的输入检查。dynamic
仅适用于 kotlin-js (Javascript)。
如何在 Kotlin (Java) 中编写此函数?函数类型与 Any 有什么关系?是否存在同时包含函数类型和 的类型Any
?
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 只是以不同的方式。下面的代码:
java - 你如何使用来自 Kotlin 的 Flowable.generate
这是 Flowable.generate 失败的存根尝试(类型注释比我通常使用的要多):
我想使用的 Java 签名是:
我得到的错误是:
我应该为编译器提供什么?
javascript - 是否可以使用 Kotlin 构建完整的 Node.js Web 应用程序?
如果我理解正确,随着Kotlin 1.1 的发布,我们可以将 JavaScript 设置为编译目标,以便完全编译为 Kotlin 项目的 JavaScript。仅使用 Kotlin 代码编写整个 Node.js 应用程序(例如快速网络服务器)是否可能(或可行)?
正如这个问题所暗示的,我们可以将 Node 模块导入 Kotlin 类:
...似乎我可以使用以下方法创建应用程序:
这是Kotlin设置快速应用程序的方式吗?或者我应该按照文档中的描述声明一个类:
为 Node.js 应用程序开发设置 Kotlin 项目的规范方法是什么?Kotlin 的 JavaScript 互操作性是否足够强大,可以继续沿着这条路走下去,还是会比它的价值更麻烦?
javascript - String::toByteArray() 在 Kotlin [js] 中无法编译
以下代码无法在 Kotlin Js 中编译:
任何想法为什么?
返回的错误是:
相同的代码在非 JavaScript Kotlin 编译中编译: