簡體   English   中英

我應該在標簽枚舉中使用大寫字母還是camelcase?

[英]Should I use uppercase or camelcase in label enums?

標題說明了一切。

cypher中 ,camelcase用於標簽。 例如:Car:Bike Label的API文檔在枚舉中定義每個標簽時使用大寫,因此Label.CAR.name()將始終為CAR ,而不是Car

使用camelcase更適合cypher查詢,但這與命名枚舉成員的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約定,我可以覆蓋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;
  }
}      

這與GraphDatabaseService#findNodesByLabelAndProperty(Label, String, String)等方法不GraphDatabaseService#findNodesByLabelAndProperty(Label, String, String)因為它似乎使用Label#name()進行匹配而不是Label#toString()因此它不匹配具有camel case的節點數據庫中的標簽。

我的工作方案

由於重寫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;
  }
}

在外部,使用先前的標簽枚舉不需要在客戶端進行任何更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM