Ich habe aus mehreren Gründen angefangen, C # - und Java-Enums in meinem Code zu verwenden:
- Sie sind viel typsicherer als Ganzzahlen, Zeichenfolgen oder Sätze von Booleschen Flags.
- Sie führen zu besser lesbarem Code.
- Es ist schwieriger, eine Aufzählung auf einen ungültigen Wert zu setzen als ein int oder eine Zeichenfolge.
- Sie erleichtern das Ermitteln der zulässigen Werte für eine Variable oder einen Parameter.
- Alles, was ich gelesen habe, zeigt an, dass sie in C # und den meisten JVMs genauso gut funktionieren wie ganze Zahlen.
Das Android-Framework hat jedoch zahlreiche Fälle, in denen Flags verschiedener Typen weitergegeben werden müssen, aber keiner von ihnen scheint Aufzählungen zu verwenden. Ein paar Beispiele , wo ich ihre Verwendung wäre denken würde vorteilhaft sind Toast.LENGTH_SHORT
/ Toast.LENGTH_LONG
und View.GONE
, View.VISIBLE
usw.
Warum ist das? Sind Aufzählungen in Dalvik schlechter als einfache ganzzahlige Werte? Gibt es einen anderen Nachteil, den ich nicht kenne?
Antworten:
Diese Antwort ist seit März 2011 veraltet.
Enums können auf Froyo und höher verwendet werden - gemäß dieser Antwort ( Warum wurde "Vermeiden Sie Enums, bei denen Sie nur Ints benötigen" aus den Leistungstipps von Android entfernt? ) Von einem Mitglied des Android VM-Teams (und seinem Blog ).
Vorherige Antwort:
Die offizielle Empfehlung des Android-Teams lautet, Aufzählungen zu vermeiden, wann immer Sie dies vermeiden können:
Quelle: Vermeiden Sie Aufzählungen, bei denen Sie nur Ints benötigen
quelle
Ganzzahlen sind kleiner und erfordern weniger Overhead, was auf Mobilgeräten immer noch wichtig ist.
quelle
IntDef
undStringDef
, die es erlauben, eine Art typedef zu deklarieren , daher ist die Verwendung von int-Konstanten sehr praktisch. blog.shamanland.com/2016/02/int-string-enum.htmlEin Kollege von mir führte einen kleinen Test zu dieser Situation durch. Er hat automatisch ein
class
und einenum
mit der gleichen Anzahl von "Aufzählungen" generiert. Ich glaube, er hat 30000 Einträge generiert.Die Ergebnisse waren:
.class
denn dasclass
war ungefähr 1200KB.class
denn dasenum
war ungefähr 800KBHoffe das hilft jemandem.
quelle