Clase de Android con contexto en el campo de objeto en Kotlin

¿Está bien tener una propiedad en la clase de objeto en Kotlin que tenga un contexto? En Android es una mala práctica poner objetos relacionados con el contexto en campos estáticos. El estudio de Android incluso lo destaca y da una advertencia a diferencia de Kotlin, donde no hay advertencia. Objeto de ejemplo:

object Example {
    lateinit var context: Context

    fun doStuff(){
        //..work with context
    }
}
Respuesta 1

Como objects son singletons, tienen una única instancia estática. Entonces, si les das una contextpropiedad, todavía estás almacenando una Contextde forma estática.

Esto tendrá exactamente las mismas consecuencias que poner un Contexten un campo estático en Java.


Si escribe el código equivalente que Kotlin genera para un objecten Java, en realidad dará como resultado los errores de pelusa adecuados:

public class Example {

    // Do not place Android context classes in static fields; this is a memory leak 
    // (and also breaks Instant Run)
    public static Context context;

    // Do not place Android context classes in static fields (static reference to 
    // Example which has field context pointing to Context); this is a memory leak 
    // (and also breaks Instant Run)
    public static Example INSTANCE;

    private Example() { INSTANCE = this; }

    static { new Example(); }

}
Respuesta: 2

Estoy usando Collections.sort () en una lista de tamaño 100000 y obtengo el error StackOverFlow. ¿Cómo puedo ampliar esto? Aquí está el código: Esto es parte de un gran proyecto. Collections.sort () se llama ...

¿Existe una visión general actualizada de las características de Java 8, que aún no son compatibles con Kotlin? Por ejemplo, llamar a un método predeterminado como Map # putIfAbsent no se compila (error de referencia no admitido): ...

El siguiente fragmento funciona bien en Linux, pero me da un error en Windows (lo cual es muy extraño ya que se supone que jvm / jdk es independiente del sistema operativo). Archivo f = ... Cadena [] split = f.getPath (). Split (...

Tengo una colección y quiero generar varios subprocesos para hacer un trabajo pesado en sus elementos. Cada elemento de la colección debe procesarse una sola vez. Deseo mantener ...