Usar el object compañero para devolver una instancia de la class en Kotlin
Android Studio 3.0 RC2 Kolin 1.1.51
Estoy creando una aplicación de Android y quiero devolver la instancia de la class que amplía la aplicación y acceder al equivalente que haría usando una estática en Java.
class BusbyMoviesMainApplication : Application() { companion object { private val instance: BusbyMoviesMainApplication = BusbyMoviesMainApplication() @JvmStatic fun getBusbyInstance(): BusbyMoviesMainApplication { return instance } } }
Lo estoy accediendo así. Sin embargo, getCacheDir devuelve null
- IncompatibleClassChangeError: Class 'java.lang.VirtualMachineError' no implementa la interfaz 'java.lang.CharSequence'
- ¿Cómo escribo en un file en Kotlin?
- Usa la extensión Kotlin en la class java de Android
- A la class le falta un constructor sin arguments, pero he proporcionado un constructor sin arguments
- ¿Cómo establecer el atributo de peso de forma dinámica desde el código de Kotlin?
BusbyMoviesMainApplication.getBusbyInstance().getCacheDir()
No puedo ver lo que estoy haciendo mal.
En Java he hecho esto antes, lo que funciona, estoy tratando de hacer lo mismo en Kotlin:
public class BusbyMoviesApplication extends Application { private static BusbyMoviesApplication mBusbyMoviesApplication; public static BusbyMoviesApplication getInstance() { return mBusbyMoviesApplication; } @Override public void onCreate() { super.onCreate(); mBusbyMoviesApplication = BusbyMoviesApplication.this; } }
- ¿Cómo manejar los errores de escritura en Apache Jena?
- Sitio de Android: select la consulta con LIKE
- Inferir solo algunos parameters de tipo en Kotlin
- Archivos internos (columnas) en la entidad de la sala
- El file spring-configuration-metadata.json no se genera en IntelliJ Idea for Kotlin @ConfigurationProperties class
- Producir una list de un ResultSet
- ¿Cómo referirte a ti mismo en la class anónima?
- JNI: Lectura y escritura de buffer directo
En el código de Kotlin, llama directamente al constructor de la subclass Application
lugar de dejar que el marco lo cree por usted. En su lugar, podría hacer lo que hizo en el código de Java e inicializar la propiedad de la instance
en el método onCreate
la Application
(más yo acorté un poco el getter):
class BusbyMoviesMainApplication : Application() { companion object { private lateinit var instance: BusbyMoviesMainApplication @JvmStatic fun getBusbyInstance() = instance } override fun onCreate() { super.onCreate() instance = this } }
Basado en la discusión en los comentarios a continuación, esta sería quizás una solución más idiomática para el comprador:
class BusbyMoviesMainApplication : Application() { companion object { @JvmStatic lateinit var instance: BusbyMoviesMainApplication private set } override fun onCreate() { super.onCreate() instance = this } }
- Obtener input con valor máximo de Mapa en Kotlin
- ¿Cómo crear un evento onclick en el adaptador usando la interfaz android?