如何通过 JNI 实现一个 Kotlin 属性?

How to implement a Kotlin property through JNI?

在 Kotlin 中,我可以使用 external 关键字将函数的实现委托给本地代码。鉴于 Kotlin 属性只是一对 getter 和 setter 函数的语法糖,我假设也应该可以使用本机代码实现 属性。但是,我似乎无法弄清楚该怎么做。

如果我在 getset 关键字前加上 external,Kotlin 告诉我它需要一个函数体:

当然,重点是 而不是 在 Kotlin 中有一个函数体。但是如果我无论如何添加一个,Kotlin(相当预期)告诉我外部声明不能有主体:

我的语法有误吗?或者根本没有办法使用 JNI 实现 Kotlin 属性?

只是猜测。我没试过。该文档没有提到 external 属性,因此您可能必须像这样通过。

class Foo {
    var bar: Int
        get() = getBarNative()
        set(value) = setBarNative(value)
    private external fun getBarNative(): Int
    private external fun setBarNative(value: Int)
}

我找到了解决办法! 可以通过 JNI 实现属性,我只是使用了错误的语法!正确的语法是:

class Test {
    var value: Int
        external get // No parentheses or parameter list!
        external set
}

此语法似乎尚未记录。

编辑: 我为已合并的 Kotlin 文档创建了一个 PR。所以现在 this feature is officially documented.