2
respostas

Peso do Enum

Em java tem-se o conceito de se evitar Enum porque pesa bem mais em espaço no apk e memoria ram, isso ainda é valido para o kotlin?

2 respostas

Sim se comporta igual ao java porque o kotlin compila para a máquina virtual java.

Fonte: https://kotlinlang.org/docs/reference/enum-classes.html

Agora se estiver pesando na sua aplicação os Enum da vida sugiro colocar alguma barra de progresso só pra diminuir a ansiedade do usuário.

Quando se diz que uma enum é mais pesada, isso se deve pois cada constante da enum é traduzida para uma classe (mas isso, não significa que seu app será mais lento, ou coisa do tipo). Um exemplo simplificado dessa estrutura seria:

public enum PontoCardeal {
    NORTE, SUL, LESTE, OESTE
}

Na realidade, o código gerado é de forma simplificada equivalente a:

public class PontoCardeal extends java.lang.Enum {

    public static final PontoCardeal NORTE = new PontoCardeal("NORTE", 0);
    public static final PontoCardeal SUL = new PontoCardeal("SUL", 1);
    public static final PontoCardeal LESTE = new PontoCardeal("LESTE", 2);
    public static final PontoCardeal OESTE = new PontoCardeal("OESTE", 3);

}

Muitas vezes, essa estrutura é interessante quando queremos métodos abstratos ou construtores customizados nas nossas constantes da enum. Porém, se queremos apenas criar constantes para chamar de uma forma mais "bonitinha", é melhor criar atributos públicos e finais:

public static final String NORTE = "norte";

Essa é a estratégia usada no fonte do Android.

Se você olhar de onde vem o Toast.LENGTH_SHORT e o Toast.LENGTH_LONG encontrará na classe Toast:

public class Toast {
    public static final int LENGTH_SHORT = 0;
    public static final int LENGTH_LONG = 1;
}