我应该在标签枚举中使用大写字母还是camelcase



标题说明了一切。

在密码中,camelcase用于标签。例如CCD_ 1和CCD_。Label的API文档在定义枚举中的每个标签时使用大写字母,因此Label.CAR.name()将始终为CAR,而不是Car

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

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

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

解决方案的第一种方法

为了遵守Java约定,我可以重写:Car0,并使用它来代替不能重写的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;
  }
}      

这在GraphDatabaseService#findNodesByLabelAndProperty(Label, String, String)之类的方法中不太好用,因为它似乎使用Label#name()而不是Label#toString()进行匹配,所以它不会匹配数据库中具有骆驼大小写标签的节点。

我的工作解决方案

由于重写Enum#toString()不起作用,而且Neo4j在内部对所有内容都使用Label#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;
  }
}

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

最新更新