如何通过JNI实现Kotlin属性?

问题描述

在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
}

该语法似乎尚未记录。我在a fixed Kotlin issue中发现有关外部访问器属性错误的错误。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...