Prawie skończyłem z obliczeniami, z którymi pracuję w Androidzie dla mojej aplikacji. Próbuję utworzyć wyliczenie płci, ale z jakiegoś powodu otrzymuję pojawia błąd składni, wstaw "EnumBody", aby uzupełnić EnumDeclaration.
public static enum Gender
{
static
{
Female = new Gender("Female", 1);
Gender[] arrayOfGender = new Gender[2];
arrayOfGender[0] = Male;
arrayOfGender[1] = Female;
ENUM$VALUES = arrayOfGender;
}
}
Próbowałem również bez statycznego {}, ale otrzymuję ten sam błąd składni.
Odpowiedzi:
Gdzie na ziemi znalazłeś tę składnię? Wyliczenia Java są bardzo proste, wystarczy określić wartości.
Jeśli chcesz, aby były bardziej złożone, możesz dodać do nich wartości w ten sposób.
Następnie, aby użyć wyliczenia, zrobiłbyś coś takiego:
źródło
Odbyła się pewna debata na temat tego punktu spornego, ale nawet w najnowszych dokumentach android sugeruje, że używanie wyliczeń w aplikacjach na Androida nie jest dobrym pomysłem. Powodem jest to, że zużywają więcej pamięci niż zmienna statyczna. Oto dokument ze strony z 2014 r., Który odradza stosowanie wyliczeń w aplikacji na Androida. http://developer.android.com/training/articles/memory.html#Overhead
Cytuję:
Były miejsca, w których mówią, że te wskazówki są przestarzałe i nie są już wartościowe, ale powodem, dla którego ciągle je powtarzają, musi być trochę prawdy. Pisanie aplikacji na Androida to coś, co powinieneś zachować jak najmniejszą wagę, aby zapewnić płynną obsługę. I liczy się każdy centymetr wydajności!
źródło
Jak skomentował Chris, wyliczenia wymagają znacznie więcej pamięci w systemie Android, co sumuje się, ponieważ są używane wszędzie. Zamiast tego powinieneś wypróbować IntDef lub StringDef , które używają adnotacji, aby kompilator weryfikował przekazane wartości.
Może być również używany jako flagi, pozwalając na składanie binarne (operacje OR / AND).
EDYCJA : Wygląda na to, że przekształcanie wyliczeń w wartości typu int jest jedną z domyślnych optymalizacji w Proguard .
źródło
źródło
Zgodnie z tym filmem, jeśli używasz ProGuard, nie musisz nawet myśleć o problemach z wydajnością Enums !!
źródło
Preferowanym podejściem Androida są stałe int wymuszane za pomocą @IntDef:
Dokumenty: https://developer.android.com/studio/write/annotations.html#enum-annotations
źródło