Choque de extensión Kotlin

Si tengo un jar, en el classpath, donde he creado una function de extensión en digamos la class String por argumento y tengo otro jar con la misma function de extensión en String, ¿cómo resolverá Kotlin los dos?

Supongo que si ambas funciones están definidas en los mismos packages, entonces habrá un choque.

Pero si hay diferentes packages, ¿cómo puedo distinguir las dos extensiones?

De hecho, si están en el mismo package, no se comstackrá. Para el otro escenario, supongamos que tiene dos files con dos packages diferentes, que contienen funciones de extensión con la misma firma:

Primer file:

package ext1 fun Int.print() = print(this) 

Segundo file:

 package ext2 fun Int.print() = print(this * 2) 

Y este file donde intentas usarlo:

 package main fun main(args: Array<String>) { 42.print() } 

IntelliJ realmente le dará un dialog de import donde puede elegir cuál desea usar:

enter image description here

Puede importar uno de ellos de esta manera:

 import ext1.print 

Y si necesita usar el otro también, puede cambiarle el nombre con la palabra key as . Esta palabra key funciona para las importaciones en general, las classs con el mismo nombre, etc.

 import ext2.print as print2 

Entonces este progtwig comstack e imprime 4284 :

 package main import ext1.print import ext2.print as print2 fun main(args: Array<String>) { 42.print() 42.print2() } 

Como nota rápida, la que importes con la palabra key as será un poco más difícil de usar, ya que la function de autocomplete no parece funcionar bien, al seleccionar la segunda opción aquí, simplemente se completa la llamada a 42.print() .

enter image description here

Entonces, como la function de extensión en kotlin es solo function estática, otras funciones se distinguirán por import.

También puede crear alias para una de las funciones de extensión para una mayor legibilidad:

 import by.bkug.extensions.helpers.extension import by.bkug.extensions.extension as extension1 fun test() { myType().extension() // by.bkug.extensions.helpers.extension myType().extention1() // by.bkug.extensions.extension } 
  • Función de queue Kotlin List
  • ¿Se debe evitar nombrar una function igual que una class existente en Kotlin? ¿Por qué?
  • Cómo crear variables en el context principal
  • Función de extensión en el enumerador, `values ​​()` no disponible?
  • Kotlin: Cómo extender la class enum con una function de extensión
  • ¿Cómo hacer reference a la class interna anónima en Kotlin?
  • Funciones de extensión Kotlin por tipo
  • ¿Los methods de extensión y las properties de extensión son malas prácticas?
  • Complemento de estudio Android con id: 'kotlin-android-extensions'
  • Miembro de Kotlin y extensión al mismo time
  • Mapa Mutable no anulable