[英]Convert enum to class and vice versa
目前,我們有一個業務實體可以表示為枚舉或類。
類實現更容易,並使業務邏輯更清晰。 但是有50%的概率可以改變要求,而枚舉代表將使我們的生活更輕松。
具體例子
實體具有標題和顏色。 顏色是可編輯的,所以有兩種方式
未來的變更要求 - 應該有與每個實體相關的規則
如果規則集是靜態的,則第二個選項是過度殺傷。
因此,如果我們需要將類轉換為枚舉,是否有關於此過程的任何建議?
編輯
實體集是有限的,不太可能被用戶更改。
先感謝您。
假設Entity
意味着JPA entities.
您可以使用enum
返回到外部世界和內部實體,您可以擁有代表它的屬性。
@Entity
class Entity {
@Column
Integer ruleIndex = 0;//Illustration purpose only
public Color getColor() {
// ruturn color based on rule that will be applied by ruleindex
}
}
enum Color {
BLUE(0), BLACK(1), WHITE(2);
private int ruleIndex = 0;
private Color(int ruleIndex) {
this.ruleIndex = ruleIndex;
}
}
更新
不建議將枚舉用作實體。 相反,您可以使用單繼承策略
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="DISC", discriminatorType=STRING,length=20)
public class Color
{......}
@Entity
@DiscriminatorValue("Blue")
public class Blue extends Color
{......}
@Entity
@DiscriminatorValue("Green")
public class Green extends Color
{......}
這將允許您將所有數據存儲在同一個表中,並允許您根據對象識別數據。
如果您想要枚舉中的某些功能和類中的某些功能,那么您可以使用以下各項的混合:
public class ColoredTitle
{
private String color;
private Title title;
public ColoredTitle(String color, Title title)
{
this.color = color;
this.title = title;
}
public String getColor()
{
return color;
}
public void setColor(String color)
{
this.color = color;
}
public String getHeading()
{
return title.heading;
}
enum Title
{
FRONT_PAGE("Front Page"),
FOOTER_TITLE("Footer Title");
private String heading;
Title(String title)
{
this.heading = title;
}
}
}
如果它有任何可編輯的東西,那么無論如何你都需要一個實體類,所以首先去實體類。
如果您以后需要實現一組固定的規則,請將它們作為帶有硬編碼規則的枚舉實現,並在實體類中添加映射到該枚舉的字段。
您可以在實體字段上映射枚舉,如下所示:
enum MyRule {
RULE1, RULE2;
// implement hard-coded rule
}
@Entity
class Myentity {
@Enumerated(/* optionally specify EnumType, default is ordinal */)
@Column
MyRule rule;
}
枚舉可以像普通類一樣使用方法。
public enum Tree {
FIR("Fir Tree"),
BIRCH("Birch Tree");
private String desc;
public Tree(String desc) { this.desc = desc; }
public String getDesc() { return desc; }
public String getRandom() { return "abc"; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.