Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin内联属性的用例是什么?_Kotlin - Fatal编程技术网

Kotlin内联属性的用例是什么?

Kotlin内联属性的用例是什么?,kotlin,Kotlin,由于属性的getter或setter通常不具有作为参数或类型的函数,使用inlineproperties有什么好处/用例 如果好处是减少与方法调用相关的成本,那么为什么不在默认情况下使所有属性getter/setter内联呢 例如 以下是内联属性: 具体化类型参数的示例: inline val <reified T : PsiElement> T.nextSiblingOfSameType: T? get() = PsiTreeUtil.getNextSiblingOfTy

由于属性的getter或setter通常不具有作为参数或类型的函数,使用
inline
properties有什么好处/用例

如果好处是减少与方法调用相关的成本,那么为什么不在默认情况下使所有属性getter/setter内联呢

例如

以下是内联属性:

具体化类型参数的示例:

inline val <reified T : PsiElement> T.nextSiblingOfSameType: T?
    get() = PsiTreeUtil.getNextSiblingOfType(this, T::class.java)
inline val T.nextSiblingOfSameType:T?
get()=PsiTreeUtil.getNextSiblingOfType(this,T::class.java)
另一个用例是从库的二进制接口隐藏一些属性。在Kotlin标准库中,再加上
@InlineOnly
注释,这可能使将来从类文件中排除此类属性的声明成为可能,从而减少方法计数,这将极大地提高Android的64K方法限制


内联有额外生成代码的成本,这反过来会对缓存造成压力。AFAIK inline适合于高阶函数,因此生成的代码看起来更像java,或者换句话说,它将为高阶函数生成完整的方法。我从未见过一个属性访问器像这样内联
inline val <reified T : PsiElement> T.nextSiblingOfSameType: T?
    get() = PsiTreeUtil.getNextSiblingOfType(this, T::class.java)