我想更新枚举值运行时。我正在使用JPA和当前有一个枚举
Country
在实体中使用此枚举为:
public enum ColorEnum
{
A, B, C
}
它的工作但是如果有要求,我想在将来提供一个api来添加新的Enum'D'。在那种情况下,创建实体的最佳方法是什么?有没有办法改变枚举?
答案 0 :(得分:2)
实现此目的的方法是使用界面。
interface Colour
{
String getHex(); // or whatever a colour does
}
然后您可以声明默认颜色:
enum DefaultColour implements Colour
{
RED("ff0000"),
BLUE("0000ff");
private final String hex;
DefaultColour(String hex) { this.hex = hex; }
@Override
public String getHex() { return hex; }
}
然后当有人想要添加其他颜色时,他们可以实现相同的界面:
class Gold implements Colour {
//...
}
或提供完整清单:
enum AdditionalColour implements Colour {
YELLOW("..."),
GREEN("...");
//...
}
我会在运行时使用service provider interface来提供额外的颜色。
答案 1 :(得分:1)
枚举旨在成为具有常量感的静态,最终,不可变,实例控制的对象[...]
我建议使用String
或代表你的颜色的可序列化类(如RBG值)并坚持使用。
@Entity
@Table(name = "color")
public class ColorEntity implements Serializable {
@Enumerated(EnumType.STRING)
@Column(name = "red", nullable = false)
private int red;
@Enumerated(EnumType.STRING)
@Column(name = "green", nullable = false)
private int green;
@Enumerated(EnumType.STRING)
@Column(name = "blue", nullable = false)
private int blue;
// remainder omitted
}