kotlin - reales - libro de android studio en español pdf
Datos estáticos en Kotlin (1)
Puede utilizar el visor de códigos de bytes de Kotlin para averiguar en qué se compilan estas opciones.
Con Kotlin 1.0.2 el bytecode compilado muestra que
valpropiedadvalenobjectoobjectcompanion objectse compila en un campoprivate static finaldentro de la clase:// access flags 0x1A private final static I FILES_TO_DOWNLOAD = 100y un captador, que se llama al referirse a la propiedad:
// access flags 0x1019 public final static synthetic access$getFILES_TO_DOWNLOAD$cp()IDesde Java, se puede llamar al
DefaultValues.INSTANCE.getFILES_TO_DOWNLOAD()comoDefaultValues.INSTANCE.getFILES_TO_DOWNLOAD()oDefaultValues.Companion.getFILES_TO_DOWNLOAD()respectivamente.La propiedad de nivel superior no
constse compila de la misma forma en (1) con la única diferencia de que el campo y el captador se colocan ahora dentro de la claseFilenameKt.Pero el nivel superior de
const valse compila en un campopublic static final:// access flags 0x19 public final static I DEFAULT_FILES_TO_DOWNLOAD = 100El mismo campo final estático público se producirá cuando se declare una
const valdentro de un objeto. Además, puede lograr el mismo bytecode resultante si agrega la anotación@JvmFielda las propiedades declaradas en (1) .
En conclusión, puede definir public static final campo public static final utilizando const o @JvmField en un object o en el nivel superior.
Por favor, dígame, ¿hay alguna diferencia (en términos de Java) en estos ejemplos:
object DefaultValues { val FILES_TO_DOWNLOAD = 100 }y
class DefaultValues { companion object { val FILES_TO_DOWNLOAD = 100 } }Sin envoltura de clase o objeto:
const val DEFAULT_FILES_TO_DOWNLOAD = 100y
val DEFAULT_FILES_TO_DOWNLOAD = 100
¿Cuál es la verdadera manera de definir ?:
public static final int FILES_TO_DOWNLOAD = 100