2017-10-19 57 views
3

我想了解如何正確使用inline修飾符。我理解一般情況,當我們內聯lambda來防止過量分配時,如docs中所述。爲什麼使用內聯而不使用lambdas

我檢查科特林STDLIB和_Strings.kt發現下面的代碼:

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

背後有什麼用這裏的inline推理?

回答

2

這種特殊的功能和其他幾個人在kotlin-stdlib被標記爲@InlineOnly,使它們不存在實際STDLIB類文件,並僅可用於科特林編譯器內聯它們。以這種方式實現的目標是減少工件中的方法數量,這對於Android至關重要。

除此之外,使用inline沒有lambda表達式的函數對reifying type parameters有用。

1
+0

在我的示例中,我看到的唯一開銷是額外的方法聲明。在那種情況下,爲什麼我不想用內聯標記方法? Docs說內聯大方法會導致生成的代碼增長,所以我應該將內聯添加到小於100行的每種方法? – mol

+0

你不能內聯一個在類中使用後臺字段的方法,否則就去做。擴展方法沒有這個問題,因爲它們在技術上接收它們作爲附加參數擴展的類,它們實際上並沒有被添加。 – dillius

0

我會說這與效率有關。而不是調用函數elementAtOrNull,因此getOrNull直接調用這個函數。

相關問題