Supongamos que tengo el siguiente código que quiero hacer como un componente reutilizable:
fun <T> MutableList<T>.swap(index1: Int, index2: Int) { val tmp = this[index1] // 'this' corresponds to the list this[index1] = this[index2] this[index2] = tmp }y quiero usarlo en cualquier lugar de mi aplicación de la siguiente manera:
val l = mutableListOf(1, 2, 3) l.swap(0, 2)Corríjame si me equivoco, pero creo que las declaraciones de extensión de función pueden existir fuera de una clase. Entonces, en una aplicación de Android, ¿dónde colocaría esta declaración? ó acaso importa? ¿La compilación solo compilará el código independientemente de dónde se declare la extensión y la hará reutilizable globalmente o tengo que hacerla parte de una clase?
Puede crear algún archivo, por ejemplo, ListExt.kt cualquier lugar que desee (por ejemplo, en el paquete main_package_name/util/ListExt.kt ) y coloque la función de extensión allí y estará disponible en todo el proyecto. Entonces, el contenido del archivo ListExt.kt puede ser:
package main_package_name.util fun <T> MutableList<T>.swap(index1: Int, index2: Int) { val tmp = this[index1] // 'this' corresponds to the list this[index1] = this[index2] this[index2] = tmp } // other extension functions on the ListsPueden estar en cualquier lugar, pero parece tener sentido tener extensiones para una clase en particular en el mismo archivo y/o paquete. Por ejemplo, las extensiones de String podrían estar en StringExtensions.kt, y eso podría estar opcionalmente en un paquete de extensiones.
Para que una extensión sea global, debe colocarla fuera de la clase
package com.extension.globalcontext fun <T> MutableList<T>.swap(index1: Int, index2: Int)Y para llamarlos necesitas importar el paquete
import com.extension.globalcontext l.swap(0, 2)