Datos estáticos en Kotlin

Por favor, dime, ¿hay alguna diferencia (en términos de Java) en estos ejemplos?

  1. object DefaultValues { val FILES_TO_DOWNLOAD = 100 } 

    y

     class DefaultValues { companion object { val FILES_TO_DOWNLOAD = 100 } } 
  2. Sin contenedor de class o object:

     const val DEFAULT_FILES_TO_DOWNLOAD = 100 

    y

     val DEFAULT_FILES_TO_DOWNLOAD = 100 

¿Cuál es la verdadera manera de definir ?:

 public static final int FILES_TO_DOWNLOAD = 100 

Puede usar el visor de códigos de bytes Kotlin para averiguar en qué se comstackn estas opciones.

Con Kotlin 1.0.2, el bytecode comstackdo muestra que

  1. val propiedad val en object u object companion object se comstack en un campo private static final dentro de la class:

      // access flags 0x1A private final static I FILES_TO_DOWNLOAD = 100 

    y un getter, que se llama al referirse a la propiedad:

      // access flags 0x1019 public final static synthetic access$getFILES_TO_DOWNLOAD$cp()I 

    Desde Java, el getter se puede llamar como DefaultValues.INSTANCE.getFILES_TO_DOWNLOAD() o DefaultValues.Companion.getFILES_TO_DOWNLOAD() respectivamente.

  2. La propiedad de nivel superior no const se comstack a la misma para (1) con la única diferencia de que el campo y getter se colocan ahora dentro de la class FilenameKt .

    Pero la const val nivel superior se comstack en un campo public static final :

     // access flags 0x19 public final static I DEFAULT_FILES_TO_DOWNLOAD = 100 

    El mismo campo final estático público se producirá cuando se declare una const val dentro de un object. Además, puede get el mismo bytecode resultante si agrega la anotación @JvmField a las properties declaradas en (1) .


Para finalizar, puede definir public static final campo public static final usando const o @JvmField en un object o en el nivel superior.

  • Nuevo fragment de Kotlin de Recyclerview
  • Xamarin Android y Kotlin Library
  • La cadena cruda de Kotlin arroja un error en blanco
  • La inferencia tipo Kotlin falla para la guayaba TreeMultimap
  • ¿Cómo hacer reference a la instancia de la class exterior en Kotlin?
  • Función Kotlin Call Javascript en Android sin webView
  • Kotlin `this` no devuelve la instancia correcta en class henetworkingada
  • ¿Cómo get una class de matriz primitiva multidimensional en kotlin?
  • El file de cero no se ejecuta en IntelliJ IDEA
  • El file spring-configuration-metadata.json no se genera en IntelliJ Idea for Kotlin @ConfigurationProperties class
  • Cómo pasar los valores de actividad a otra actividad en kotlin