为什么在没有lambda的情况下使用内联

时间:2017-10-19 13:23:29

标签: android kotlin

我正在尝试了解如何正确使用inline修饰符。我理解一般情况,当我们内联lambda以防止过度分配时,如docs中所述。

我正在检查kotlin stdlib并在_Strings.kt中找到以下代码:

@kotlin.internal.InlineOnly
public inline fun CharSequence.elementAtOrNull(index: Int): Char? {
    return this.getOrNull(index)
}

在这里使用inline背后的原因是什么?

3 个答案:

答案 0 :(得分:2)

kotlin-stdlib中的这个特定函数和其他一些函数被标记为@InlineOnly,因此它们不存在于实际的stdlib类文件中,并且只能用于Kotlin编译器内联它们。以这种方式实现的目标是减少工件中的方法计数,这对于Android来说很重要。

除此之外,使用不带lambda的inline函数对reifying type parameters非常有用。

答案 1 :(得分:1)

答案 2 :(得分:0)

我想说这与效率有关。

是直接调用函数elementAtOrNull而不是调用getOrNull函数