问题描述
在Kotlin中,我可以使用external
关键字将函数的实现委派给本机代码。鉴于Kotlin属性仅是一对getter和setter函数的语法糖,我假设也可以使用本机代码实现属性。但是,我似乎无法弄清楚为什么。
如果在get
和set
关键字前加上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中发现有关外部访问器属性错误的错误。