La propia documentación de Kotlin establece lo siguiente:
Si una función en línea no tiene parámetros de función que se puedan insertar ni parámetros de tipo cosificados, el compilador emitirá una advertencia, ya que es muy poco probable que la inserción de tales funciones sea beneficiosa.
Ambas afirmaciones, sin parámetros de función inlinable y sin parámetros de tipo cosificados , son verdaderas, por ejemplo, para los siguientes métodos de extensión en String.kt :
public inline fun String.reversed(): Stringpublic inline fun String.slice(indices: Iterable<Int>) : Stringpublic inline fun CharSequence.random(): Char¿Alguien puede explicarme una razón específica por la que los diseñadores de idiomas probablemente tomaron la decisión de marcar estos métodos como en línea? Gracias.
Como @somethingsomething señaló en los comentarios, esta pregunta se respondió en una pregunta similar antes.
La respuesta allí (por un empleado de JetBrains) fue:
Esta función en particular y algunas otras en kotlin-stdlib están marcadas como
@InlineOnlypara que no estén presentes en los archivos de clase stdlib reales y solo estén disponibles para que el compilador de Kotlin las alinee. El objetivo que se logra de esta manera es reducir la cantidad de métodos en los artefactos, lo cual es importante para Android.
La anotación @InlineOnly también se analiza en esta pregunta .