Kotlin 扩展不适用于 java.util.UUID

问题描述 投票:0回答:1

我尝试在 Kotlin 中创建扩展函数,但是编译器看不到它,它不起作用,无论我是否手动导入它,其他扩展在我的代码中运行良好。 如果我将此扩展放在我想要使用它的类中,它的事件将不起作用。

import java.nio.ByteBuffer
import java.util.*

fun UUID.fromDatabase(byteArray: ByteArray): UUID {
    val bb: ByteBuffer = ByteBuffer.wrap(byteArray)
    val high: Long = bb.getLong()
    val low: Long = bb.getLong()

    return UUID(high, low)
}

编辑: 我发现这是不可能的,要添加静态扩展,我必须执行如下操作:

fun KClass<UUID>.fromDatabase(byteArray: ByteArray): UUID {
    val bb: ByteBuffer = ByteBuffer.wrap(byteArray)
    val high: Long = bb.getLong()
    val low: Long = bb.getLong()

    return UUID(high, low)
}

以及用法

val id = UUID::class.fromDatabase(element["id"] as ByteArray)
java function kotlin uuid
1个回答
0
投票

您的扩展位于 UUID 实例上,这就是为什么它在作为静态方法调用时不起作用(但是,例如,

UUID.randomUUID().fromDatabase(...)
可以工作)

如果 UUID 类是用 Kotlin 编写的并且具有公共伴生对象,那么您就可以做到这一点,这样您的扩展函数就可以在

UUID.Companion
上,但在这种情况下这是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.