Dois-je utiliser des majuscules ou des chameaux dans les énumérations d'étiquettes ?
Question
Le titre dit tout.
Dans zéro, camelcase est utilisé pour les étiquettes.Par exemple :Car
et :Bike
.La documentation de l'API pour Label
utilise des majuscules lors de la définition de chaque étiquette dans l'énumération, alors Label.CAR.name()
sera toujours CAR
, pas Car
.
L'utilisation de camelcase s'adapte mieux aux requêtes de chiffrement, mais cela entre en conflit avec le standard Java pour nommer les membres d'énumération.Cela m'oblige à utiliser des étiquettes comme Label.BIKE_SEAT
au lieu de Label.BikeSeat
dans ma base de données de graphiques.Lequel dois-je utiliser ?
Même si utiliser des majuscules pour les membres d'une énumération est la bonne façon de le faire en Java, je suis toujours un peu curieux de savoir pourquoi les gens de Neo4j ont ensuite décidé de représenter les étiquettes sous forme d'énumérations ?
La solution 2
Première approche d'une solution
Pour respecter la convention Java, je peux remplacer Enum#toString()
et utilisez-le à la place de Enum#name()
qui ne peut être contourné.Ensuite, chaque membre aura un constructeur avec son véritable label Neo4j tel que représenté dans la base de données graphique :
public enum Label implements org.neo4j.graphdb.Label {
CAR("Car"),
BIKE("Bike"),
BUS("Bus");
private String name;
private Label(name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
Cela ne fonctionne pas bien avec des méthodes telles que GraphDatabaseService#findNodesByLabelAndProperty(Label, String, String)
parce qu'il semble utiliser Label#name()
pour faire correspondre au lieu de Label#toString()
il ne correspondra donc pas aux nœuds ayant des étiquettes de cas de chameau dans la base de données.
Ma solution de travail
Depuis le remplacement Enum#toString()
ne fonctionne pas et puisque Neo4j utilise Label#name()
pour tout en interne, je devrai de toute façon le remplacer.J'ai donc fini par définir une classe implémentant Label
qui est capable de remplacer Label#name()
:
public class Label implements org.neo4j.graphdb.Label {
public static final Label CAR = new Label("Car");
public static final Label BIKE = new Label("Bike");
public static final Label BUS = new Label("Bus");
private String name;
private Label(String name) {
this.name = name;
}
@Override
public String name() {
return name;
}
@Override
public String toString() {
return name;
}
}
En externe, aucune modification n'est nécessaire du côté client en utilisant l'énumération d'étiquette précédente.
Autres conseils
DOCUMENT ORACLE : Because they are constants, the names of an enum type's fields are in uppercase letters.
vérifier : http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html