Ich habe ein Szenario , in dem ich Spielertyp ARCHER
, WARRIOR
und sorcerer
.
Was soll ich in der Spielerklasse für einen Spielertyp verwenden?
Konstante endgültige statische String- Variable oder eine Aufzählung ? und warum?
Bitte helfen Sie mit Gründen.
77
int
Variable (mit gut benannten Konstanten für die verschiedenen Typen).Antworten:
Angenommen, Sie verwenden konstante Zeichenfolgen (oder
int
Werte - das gilt auch für sie):// Constants for player types public static final String ARCHER = "Archer"; public static final String WARRIOR = "Warrior"; // Constants for genders public static final String MALE = "Male"; public static final String FEMALE = "Female";
Dann kennen Sie den Typ Ihrer Daten nicht wirklich - was zu möglicherweise falschem Code führt:
Wenn Sie Aufzählungen verwenden, würde dies wie folgt enden:
// Compile-time error - incompatible types! PlayerType playerType = Gender.MALE;
Ebenso geben Aufzählungen einen eingeschränkten Satz von Werten an:
String playerType = "Fred"; // Hang on, that's not one we know about...
vs.
PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!
Darüber hinaus können Aufzählungen in Java mehr Informationen enthalten und auch Verhalten aufweisen. Rundum viel besser.
quelle
Enums beschränken Sie auf die erforderlichen Eingaben, während Sie auch bei Verwendung konstanter Zeichenfolgen andere Zeichenfolgen verwenden können, die nicht Teil Ihrer Logik sind.
Dies hilft Ihnen, keinen Fehler zu machen, etwas außerhalb der Domäne einzugeben, während Sie Daten eingeben, und verbessert auch die Lesbarkeit des Programms.
Außerdem können Sie Ihre Aufzählungen jederzeit als Zeichenfolge verwenden, wenn Sie dies wünschen. Hier ist eine Referenz .
quelle
Abgesehen davon, dass Sie keinen falschen Wert angeben dürfen, gibt es noch eine weitere Funktion von Aufzählungen, die zwar geringfügig erscheint, aber meiner Meinung nach sehr wichtig ist. Moderne IDEs können automatisch Werte für Aufzählungen vorschlagen, während es keine Möglichkeit gibt, die möglichen Werte einer Zeichenfolgenkonstante zuverlässig abzuleiten (Intellij IDEA führt Letzteres aus, jedoch nur für JDK-Klassen und gängige Bibliotheken). Dies ist besonders hilfreich, wenn Sie eine neue API untersuchen.
quelle
Enum ist besser für die Typensicherheit zu verwenden. Es können keine falschen Werte eingegeben werden. Aber Enum in Android benötigt so viel Speicher, dass Sie stattdessen intdef verwenden sollten. In dieser Antwort finden Sie ein Beispiel und eine Erklärung: -
IntDef / StringDef-Beispiel
Sie können auch den Android-Quellcode überprüfen, der nach Möglichkeit Enums durch IntDef / StringDef ersetzt. Ex. View.VISIBLE.
quelle
Ich würde Ihnen raten, Aufzählungen nur zu verwenden, wenn Sie wirklich aufgezählte Konstanten oder zusätzliche Funktionen benötigen, die allen Elementen gemeinsam sind.
Dies hängt natürlich von der Art der Anwendung ab, die Sie schreiben, und davon, welche Versionen und Geräte Sie unterstützen möchten.
Der Grund dafür ist, dass Aufzählungen zusätzlichen Aufwand verursachen, da sie Instanzen ihrer Elemente zuweisen. Sie können feststellen, dass es in der Android-Plattform minimale Aufzählungen gibt und fast alle Konstanten endgültige statische Ints sind (wie View.GONE und ähnliches).
quelle