是否有一个Kotlin多平台特性或模式可以帮助实现一个通用的抽象,比如说,可关闭的接口?

是否有一个Kotlin多平台特性或模式可以帮助实现一个通用的抽象,比如说,可关闭的接口?,kotlin,kotlin-native,kotlin-multiplatform,Kotlin,Kotlin Native,Kotlin Multiplatform,Java中的Closeable接口提供了一个方便的抽象,便于管理可以关闭的资源。在多平台kotlin的上下文中,是否有一种模式、实践或特性可以帮助打破共享/多平台可关闭接口和实际Java可关闭接口之间的差距,因为它们必须是两种不同的类型 无法关闭类型差异和/或标准库可关闭的影响是无法跨库组合的可关闭接口的激增,即使它们基本上是一样的。这已经在Kotlin团队的kotlinx io库中为您完成了 对于Closeable,您应该直接使用该库,无需创建自己的库 但是,如果您想创建自己的类似跨平台抽

Java中的Closeable接口提供了一个方便的抽象,便于管理可以关闭的资源。在多平台kotlin的上下文中,是否有一种模式、实践或特性可以帮助打破共享/多平台可关闭接口和实际Java可关闭接口之间的差距,因为它们必须是两种不同的类型


无法关闭类型差异和/或标准库可关闭的影响是无法跨库组合的可关闭接口的激增,即使它们基本上是一样的。

这已经在Kotlin团队的kotlinx io库中为您完成了

对于
Closeable
,您应该直接使用该库,无需创建自己的库


但是,如果您想创建自己的类似跨平台抽象,这是一个很好的示例。下面是它在封面下做的事情

通用实现实际上执行关闭逻辑,只希望每个平台都有可用的接口:

JS版本是一个新的界面:


对于每个平台,等等…

谢谢,这是我一直在寻找的共同点。rx Observable接口是否有类似的功能来跨平台桥接反应流?这将允许声明一个多平台可观察接口,该接口可以绑定到相应的平台实现(例如rxjava、rxswift等)。这更复杂,但您也可以这样做,尽管您不能在Kotlin下抽象Swift,因为互操作性是另一种方式。您需要在kotlin native中使用一个自定义实现,以便从Swift中使用,这将需要大量工作。不管怎么说,现在很多人都在使用协同程序,而不是RX。我想问一下
expect
不同的
real
接口实现的一些基本原理,你的回答只是举了一个很好的例子。
expect interface Closeable {
    fun close()
}

inline fun <C : Closeable, R> C.use(block: (C) -> R): R {
    try {
        val result = block(this)
        close()
        return result
    } catch (first: Throwable) {
        try {
            close()
        } catch (second: Throwable) {
            first.addSuppressedInternal(second)
        }
        throw first
    }
}

@PublishedApi
internal expect fun Throwable.addSuppressedInternal(other: Throwable)
actual typealias Closeable = java.io.Closeable

@PublishedApi
internal actual fun Throwable.addSuppressedInternal(other: Throwable) {
    AddSuppressedMethod?.invoke(this, other)
}

private val AddSuppressedMethod: Method? by lazy {
    try {
        Throwable::class.java.getMethod("addSuppressed", Throwable::class.java)
    } catch (t: Throwable) {
        null
    }
}
actual interface Closeable {
    actual fun close()
}

@PublishedApi
internal actual fun Throwable.addSuppressedInternal(other: Throwable) {
}