我应该在标签枚举中使用大写或camelcase吗?

5 java enums neo4j cypher

标题说明了一切.

cypher中,camelcase用于标签.例如:Car:Bike.API文档Label在枚举中定义每个标签时使用大写,因此Label.CAR.name()将始终是CAR,而不是Car.

使用camelcase更适合cypher查询,但这与命名枚举成员的Java标准相冲突.这迫使我使用标签Label.BIKE_SEAT而不是Label.BikeSeat我的图形数据库.我应该使用哪一个?

尽管使用大写字母作为枚举成员是在Java中使用它的正确方法,但我仍然有点好奇为什么Neo4j人然后决定将标签表示为枚举?

The*_*ind 6

ORACLE DOC: Because they are constants, the names of an enum type's fields are in uppercase letters.

检查:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html


小智 3

第一种解决方案

为了遵守Java约定,我可以重写Enum#toString()并使用它,而不是Enum#name()不能重写它。然后每个成员都会有一个构造函数,其真实的 Neo4j 标签如图形数据库中所示:

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;
  }
}      
Run Code Online (Sandbox Code Playgroud)

这不适用于诸如GraphDatabaseService#findNodesByLabelAndProperty(Label, String, String)因为它似乎用于Label#name()匹配而不是Label#toString()因此它不会匹配数据库中具有驼峰式大小写标签的节点之类的方法。

我的工作解决方案

由于重写Enum#toString()不起作用,并且 Neo4jLabel#name()在内部使用所有内容,因此我无论如何都需要重写它。所以我最终定义了一个Label能够重写的类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;
  }
}
Run Code Online (Sandbox Code Playgroud)

从外部来看,使用以前的标签枚举在客户端不需要进行任何更改。