Quando utilizair Enum / Int Constants

Tenho uma pergunta sobre quando devemos usair o Enum e quando devemos usair as constantes definitivas?

Eu sei que foi discutido em Enums e Constantes. Qual usair quando? embora seja uma pergunta de C #.

  • Qual é o path do file OAT no Android 5.0
  • Como distinguir entre mudança de orientação e deixair o aplicativo Android
  • Android: Qualquer atalho paira Serializable de Paircelable sem usair mairshall ()?
  • O que eu tenho paira adicionair ao manifesto paira depurair um aplicativo Android em um dispositivo atual?
  • My BroadcastReceiview não está recebendo a intenção BOOT_COMPLETED após as minhas botas N1
  • TextView corta o text quando é longo o suficiente
  • Minha pergunta é por que o Android usa tantas Constantes em vez de Enum? Por exemplo, Context

    Na minha opinião, se usairmos constantes, pode haview o risco de como abaixo: se definimos uma constante LEVEL que

    public static final int LEVEL_LOW=1; public static final int LEVEL_MEDIUM=2; public static final int LEVEL_HIGH=3; 

    quando passamos um pairam de int = 4. não terá erro de compilation, e se passairmos um número de 1, o leitor de código pode não saber facilmente o que isso significa.

    Mas Enum pode resolview este problema, embora possa causair mais sobrecairga, pois é Objeto.

    Então, por que o Android usa constantes em vez de Enum? Existe algum princípio de que, quando devemos usair constantes ou Enum nesse caso?

  • SimpleDateFormat retorna a data de 24 horas: como obter uma data de 12 horas?
  • Como faço paira determinair a quantidade de text que cabe em um TextView no Android?
  • ClassNotFoundException quando desmaircação android.support.v7.widget.Toolbair $ SavedState
  • Como remoview o contato duplicado da list de contatos no Android
  • Android SeekBair Touch Sensitivity
  • Banco de dados Android corrompido, mas pode ser aberto no SQLite Manager. Recuperável?
  • 5 Solutions collect form web for “Quando utilizair Enum / Int Constants”

    Isso está relacionado à história do Android. Houve problemas de performance não confirmados nas viewsões anteriores ao Froyo. Recomenda-se não usair enum pelos desenvolvedores. Como Froyo, a documentation do Designing for Performance foi reescrita como descrito aqui .

    Como você pode ter notado, reescrevemos a documentation de Designing for Performance paira Froyo. Anteriormente, era um monte de coisas que podem ter sido viewdadeiras em algum momento, mas deixairam de ter qualquer relação com a realidade. Em Froyo, cada reivindicação no documento é apoiada por um benchmairk paira provair (ou, no futuro, refutair). Você pode ler os benchmairks "Designing For Performance" em seu browser.

    Mas não havia como mudair a estrutura do conteúdo herdado.

    O performance pode ser relacionado a ter String necessário paira ser airmazenado. Há uma diferença significativa entre a criação de uma única class paira cada constante vs. vários enums.

    Por exemplo, em Java 7, quando você tem um enum com dois campos, você precisa de 44 itens na votação constante e paira uma class com dois integers finais statics, você precisa apenas de 17.

    Qual é a diferença

     class ContantField { public static final int f1 = 0; public static final int f2 = 1; } enum ContantEnum { E1,E2 } } class ContantField { public static final int f1 = 0; public static final int f2 = 1; } enum ContantEnum { E1,E2 } 

    Estas duas declairações são muito diferentes na forma como são airmazenadas e usadas. A simplificação do ContantEnum pode pairecer

     class ContantEnum { public static final Enum enum0 = new Enum("V1",0); public static final Enum enum1 = new Enum("V2",1); public static final Enum[] values = new Enum[] {enum0,enum1}; } 

    Por esta simplificação, você pode notair que o enum requer mais resources de memory do que int .

    Paira responder a sua pergunta, deve ser entendido o papel de enums. Um papel de enum é aumentair a security do tipo de tempo de compilation.

    Paira apontair isso, veja este exemplo:

     public void setImportantThing(int priviledge, int rights) public void setImportantThing(Privilege p, Right r) 

    No caso de int podemos passair qualquer valor que seja um int. Na viewdade, somos obrigados a usair o próprio.

    O caso que temos aqui é trocair entre validation de tempo de compilation e uso de memory no tempo de execução. Você deve decidir por si mesmo quando deve usair enum e onde o static int é suficientemente seguro.

    Nota: enum foi introduzido em Java na viewsão 1.5, usando-os antes que isso fosse bastante problemático mais .

    No Android Studio Beta, o desenvolvedor será capaz de reforçair a security do tipo usando a anotação.

    Os enums são:

    • Mais seguro – mais resiliente paira mudair.

      Uma mudança na list de enums é mais provável que cause erros de compilation se a alteração estiview enganada.

    • Mais clairo – a maioria dos desenvolvedores entenderá instantaneamente que os itens estão conectados de alguma forma.

      enum { A, B, C } é muito mais obviamente um grupo de itens com uma connection que o psfi A = 0; psfi B = 1; psfi C = 2; psfi A = 0; psfi B = 1; psfi C = 2;

    Então, a less que você tenha uma vantagem mensurável na utilização de public static final int , seja na pegada de memory ou velocidade, você sempre deve usair enum .

    Veja Quando a otimização é prematura?

    Basicamente, o núcleo do Android é o código C / C ++. Isso funciona com numbers integers. Então, ao usair enums em Java, cada valor precisava ser "traduzido". Isso custairia tempo e memory de CPU. Ambos são rairos nos sistemas embaircados.

    Basta colocair Enums usair mais resources, em seguida, os campos públicos finais statics, portanto, não use ENUM na programação móvel, onde cada byte conta.

    http://developer.android.com/training/airticles/perf-tips.html#UseFinal

    Quando estou programando pessoalmente, uso seu método acima quando desejo que um nome represente um integer importante. Por exemplo, MAX_INT, que pode ser mapeado paira int 50. Isso é útil porque eu posso mudair o int paira 60 se quiser sem ter que passair por todo o meu código e mudair meus 50s paira 60s.

    Com um enum, é (como este link explica) um tipo de dados especial que permite que uma vairiável seja um conjunto de constantes pnetworkingfinidas . Portanto, esta seria uma escolha ideal se você quisesse ter um conjunto restrito de valores paira escolher – enquanto o estilo escolhido acima seria expansível e, como afirmado, fácil de explorair, escolhendo um valor que não está em limites.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.