¿Cuál es el uso del <T>
parámetro de tipo ante el nombre de función en Kotlin?
Ejemplo:
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1]
this[index1] = this[index2]
this[index2] = tmp
}
Refiriéndose a la primera <T>
arriba.
He tratado de buscar a través de los documentos Kotlin con respecto a los genéricos, así como los genéricos de Java sin embargo, en su mayoría sólo tocan en el segundo <T>
no el primero.
Se utiliza para indicar que los genéricos se utilizan y no algún tipo T
se hace referencia.
Echar un vistazo a este ejemplo completamente válida
fun <String> MutableList<String>.swap(index1: Int, index2: Int)
Ahora bien, esto puede ser llamado en cualquier MutableList<*>
y no sólo MutableList<String>
. Si no iba a escribir <String>
después de la fun
palabra clave, ¿cómo Kotlin saber que en realidad estabas referencia a una genérica y no kotlin.String
?
Lo mismo ocurre con el ejemplo que has demostrado. El <>
después de que los fun
introduce sólo un nuevo parámetro genérico, de lo contrario Kotlin se quejaban de que no sabría el tipoT