Ich bin fast fertig mit einer Berechnungsaktivität, mit der ich in Android für meine App arbeite. Ich versuche, eine Gender-Aufzählung zu erstellen, aber aus irgendeinem Grund, wenn ein Syntaxfehler auftritt, fügen Sie "EnumBody" ein, um die EnumDeclaration abzuschließen.
public static enum Gender
{
static
{
Female = new Gender("Female", 1);
Gender[] arrayOfGender = new Gender[2];
arrayOfGender[0] = Male;
arrayOfGender[1] = Female;
ENUM$VALUES = arrayOfGender;
}
}
Ich habe es auch ohne das statische {} versucht, aber ich erhalte den gleichen Syntaxfehler.
Antworten:
Wo um alles in der Welt haben Sie diese Syntax gefunden? Java Enums sind sehr einfach, Sie geben nur die Werte an.
Wenn Sie möchten, dass sie komplexer sind, können Sie ihnen auf diese Weise Werte hinzufügen.
Um dann die Aufzählung zu verwenden, würden Sie ungefähr Folgendes tun:
quelle
Es gab einige Debatten um diesen Streitpunkt, aber selbst in den neuesten Dokumenten schlägt Android vor, dass es keine so gute Idee ist, Aufzählungen in einer Android-Anwendung zu verwenden. Der Grund dafür ist, dass sie mehr Speicher als eine statische Konstantenvariable verbrauchen. Hier ist ein Dokument von einer Seite von 2014, das von der Verwendung von Aufzählungen in einer Android-Anwendung abrät. http://developer.android.com/training/articles/memory.html#Overhead
Ich zitiere:
Es gab einige Stellen, an denen sie sagten, dass diese Tipps veraltet und nicht mehr wertvoll sind, aber der Grund, warum sie sie immer wieder wiederholen, muss sein, dass es eine Wahrheit gibt. Das Schreiben einer Android-Anwendung ist etwas, das Sie für eine reibungslose Benutzererfahrung so leicht wie möglich halten sollten. Und jeder Zentimeter Leistung zählt!
quelle
Wie von Chris kommentiert, benötigen Enums unter Android viel mehr Speicher, was sich summiert, da sie überall verwendet werden. Sie sollten stattdessen IntDef oder StringDef ausprobieren , die Anmerkungen verwenden, damit der Compiler übergebene Werte überprüft .
Es kann auch als Flags verwendet werden, um eine binäre Komposition (OR / AND-Operationen) zu ermöglichen.
EDIT : Es scheint, dass die Umwandlung von Enums in Ints eine der Standardoptimierungen in Proguard ist .
quelle
quelle
Laut diesem Video müssen Sie, wenn Sie den ProGuard verwenden, nicht einmal über Leistungsprobleme bei Enums nachdenken !!
quelle
Der bevorzugte Ansatz von Android sind int-Konstanten, die mit @IntDef erzwungen werden:
Dokumente: https://developer.android.com/studio/write/annotations.html#enum-annotations
quelle