studio serializar putparcelable pasar online objetos objeto entre describecontents actividades kotlin

kotlin - serializar - hace Cualquier== Objeto



putparcelable android (4)

El siguiente código en kotlin:

Any().javaClass

Tiene valor de java.lang.Object . ¿Significa eso que Any y Object son la misma clase? ¿Cuáles son sus relaciones?


De hecho, no hay java.lang.Object en el aspecto de Kotlin lang, por lo que ciertamente no se puede decir que Any es Object . Solo puedes decir que Any toma el lugar de Object en Kotlin.


El compilador de Kotlin trata a kotlin.Any y java.lang.Object como dos tipos diferentes, pero en tiempo de ejecución se representan con la misma clase java.lang.Object .

javaClass propiedad javaClass devuelve la clase de tiempo de ejecución de una instancia, de modo que es por eso que obtiene la misma clase java.lang.Object en ambos casos.

También hay otros tipos que son diferentes en tiempo de compilación, pero iguales en tiempo de ejecución; se enumeran en la sección kotlinlang.org/docs/reference/java-interop.html#mapped-types de la documentación.


No.

De los documentos de Kotlin (énfasis mío)

Todas las clases en Kotlin tienen una superclase común Any , que es un super predeterminado para una clase sin supertipos declarados:

class Example // Implicitly inherits from Any

Any no es java.lang.Object ; en particular, no tiene ningún miembro aparte de equals() , hashCode() y toString() . Por favor, consulte la sección de interoperabilidad de Java para más detalles.

Además, de la sección sobre tipos mapeados encontramos:

Kotlin trata algunos tipos de Java especialmente. Dichos tipos no se cargan desde Java "como está", pero se asignan a los tipos de Kotlin correspondientes. La asignación solo importa en el momento de la compilación, la representación en tiempo de ejecución permanece sin cambios. Los tipos primitivos de Java se asignan a los tipos de Kotlin correspondientes (teniendo en cuenta los tipos de plataforma):

...

java.lang.Object kotlin.Any!

Esto dice que en el tiempo de ejecución java.lang.Object y kotlin.Any! Se tratan igual. Pero el ! también significa que el tipo es un tipo de plataforma, lo que tiene implicaciones con respecto a la desactivación de cheques nulos, etc.

Cualquier referencia en Java puede ser nula, lo que hace que los requisitos de Kotlin de estricta seguridad nula no sean prácticos para los objetos procedentes de Java. Los tipos de declaraciones de Java se tratan especialmente en Kotlin y se llaman tipos de plataforma. Los controles nulos son relajados para tales tipos, por lo que las garantías de seguridad para ellos son las mismas que en Java (ver más abajo).

...

Cuando llamamos a métodos en variables de tipos de plataforma, Kotlin no emite errores de nulabilidad en tiempo de compilación, pero la llamada puede fallar en tiempo de ejecución, debido a una excepción de puntero nulo o una aserción que Kotlin genera para evitar que se propaguen nulos:


"Any" es el análogo de java.lang.Object : una superclase de todas las clases en Kotlin.