Soy nuevo en Kotlin y encontré muchos casos en la documentación donde las etiquetas, y common
enumeran js
diferentes valores de retorno o tipos de clase. ¿Alguien podría explicar qué significa eso exactamente?native
jvm
Aquí hay un ejemplo:

Mis dos preguntas aquí son:
¿ Cómo son class
y diferentes?typealias
open class
¿Por qué parecen devolver valores diferentes para crear lo mismo? Solución del problema
En primer lugar, la mayor parte de la información en los documentos no es relevante cuando se encuentra en la JVM. Si escribe LinkedHashMap<String, String>()
, en realidad (debido a que la JVM solo escribe alias) crea un java.util.LinkedHashMap, por lo tanto, la forma en que LinkedHashMap de kotlin se "implementa" en la JVM es usando el Java incorporado. Sin embargo, si llamas a linkedMapOf, obtienes una instancia de la clase kotlin.collections.LinkedHashMap<K, V>, pero si observas el tipo reflejado (::clase), en realidad sigue siendo java.util.LinkedHashMap. Entonces, podemos concluir lo siguiente de esto:
En la JVM, se utilizan tipos de colección de java stdlib (porque el compilador cambia las invocaciones del constructor a colecciones de kotlin, a invocaciones de java)Existe una clase o interfaz común, por lo que no tiene que escribir código diferente en diferentes plataformas; sin embargo, se puede usar un tipo diferente en el tiempo de ejecución.Cuando se usa JS, LinkedHashMap se puede anular (porque lo es open
), y es el "implementador" del tipo esperado de LinkedHashMap.Al usar objetivos nativos, debido a que el orden se conserva cuando se usa un HashMap normal, LinkedHashMap apunta allí porque no hay razón para usar un hashmap vinculado en lugar de uno normal.Editar: me acabo de dar cuenta de que realmente no respondí tu pregunta:
una clase es solo su clase OOP normal, pero no se puede anular porque está abierta, typealias significa que cuando hace referencia a un determinado tipo, en realidad "apunta" a un tipo diferente (puede verlo como un cambio de nombre de tipo, o reexportar), y una clase abierta es una clase que se puede extender/anularDebido a las implementaciones específicas de la plataforma. Esta estructura o expect + actual le permite escribir código común para todas las plataformas sin tener que preocuparse por una plataforma individual.Espero que esto responda a tus preguntas, avísame si tienes más.
No hay comentarios.:
Publicar un comentario