Est-il de meilleures pratiques pour la rédaction des cartes de style littéral en Java?
En bref, si vous voulez écrire une carte, par exemple, de constantes en Java, par exemple en Python et en Javascript, vous écrivez comme un littéral,
T<String,String> CONSTANTS =
{
"CONSTANT_NAME_0": CONSTANT_VALUE_0 ,
"CONSTANT_NAME_1": CONSTANT_VALUE_1 ,
"CONSTANT_NAME_2": CONSTANT_VALUE_2 ,
//...
} ;
est-il un Class
ou n'importe quel Object
que vous pouvez utiliser pour la rédaction d'une structure de données comme ça?
- Voir aussi initialiser java HashSet valeurs par construction question.
Vous devez vous connecter pour publier un commentaire.
Constantes? J'utilise un enum.
Valeur, par exemple
NAME_2
peut être obtenue comme suit:Seulement de donner la enum un peu plus raisonnable de nom, par exemple
Settings
,Defaults
, etc, tout ce que les paires nom/valeur fait représentent.enum
moi-même. Cependant la documentation officielle sur ce type n'est pas très informatif. Merci pour l'exemple. Votre commentaire sur mon appellation variable -- je pourrais ajouter, est essentiellement superflu cependant.Constants
dans l'exemple, pas sur votre extrait de code 🙂value()
renvoie simplement que vous avez passé dans l'enum constructeur, dans cet exempleValue1
,Value2
etValue3
. LevalueOf()
méthode consiste à convertir les littéraux de chaîne"NAME_1"
,"NAME_2"
et"NAME_3"
à de vrais types enum. Utile lorsque, par exemple, la cartographie d'un varchar (en DB) en Java de type enum.enum
type. Vous n'avez pas besoin de passer comme arguments creux le constructeur, pensez-vous?valueOf()
retourne leenum
exemple représenté par laString
nom. Donc, il est utile chaque fois que vous avez l'enum nom dans la saveur d'unString
pour une raison quelconque (DB colonne, fichier texte, la saisie de l'utilisateur, etc) et que vous souhaitez obtenir un réel enum instance hors de lui. E. g.Constants name1 = Constants.valueOf("NAME_1");
retourneConstants.NAME1
.enum
. Il explique en gros comment il fonctionne sous les couvertures.J'aime le faire de cette façon:
Le double {{ }} sont un exemple d'initialisation du bloc. Ils sont un peu inhabituel, mais ils sont utiles. Pas besoin de bibliothèques ou des aides.
Map
s comparer égales si elles "représentent la même mappings">.HashMap
. L'intérieur des accolades sont un "Exemple l'Initialisation du bloc." La lecture de ces tutoriel officiel pages: docs.oracle.com/javase/tutorial/java/javaOO/... et docs.oracle.com/javase/tutorial/java/javaOO/initial.html.Non, Java ne dispose pas d'une carte littérale. Le plus proche que vous trouverez ce est l'utilisation de Google Collections ImmutableMap:
ImmutableMap.builder()
qui permet de faire de plus grands immuable cartes.Désolé, je suis un bricoleur 🙂 C'est un peu le moyen le plus propre.
Vous pouvez écrire vous-même un rapide fonction d'assistance:
Note le code ci-dessus ne va pas vous empêcher d'écraser les constantes du même nom, à l'aide de
CONST_1
plusieurs endroits dans votre liste de résultat de la finaleCONST_1
's la valeur figurant.Utilisation est quelque chose comme:
enum
type en termes de facilité d'écriture.Voici une autre façon, le mieux adapté pour les cartes qui ne seront pas en train de changer:
unmodifiableMap()
- bon conseil.public Map<String,String> getMap() { return Collections.unmodifiableMap(map); }
semble autoriser l'accès en lecture à la carte à partir de l'extérieur de notre classe.Java7 suppose de mettre en œuvre syntaxe suivante:
Mais maintenant, vous êtes obligé d'utiliser les solutions proposées par Jorn ou Tony Ennis.
Ok, avec Jorn de l'amélioration je n'arrive pas à changer la carte à tous, en interne ou en externe. Peut-être pas tout à fait lisible, mais si vous avez besoin de la carte pour être inmodifiable je pense que c'est mieux.
Map
mise en œuvre avecstatic final
champs serait probablement suffisant.static final
.class
la mise en œuvre deMap
.J'aime faire la déclaration et l'initialisation sur la même ligne. J'ai utilisé cette pratique petit utilitaire pour aussi longtemps qu'il est fondamentalement est ma carte "littéral" et jusqu'à ce qu'ils ont fait "à droite" dans la languange, je vais continuer à l'utiliser comme ça 🙂
Heureux de le partager ici.