我在 proto code 中有一个具有Integer属性的实体:
class MyEntity:
String name
@Choices({1, "BSD", 2, "Apache", 3, "GPL"}
Integer frequency
@ChoicesSegment({1000, 2000, 3000}, {"BSD", "Apache", "GPL"})
Integer type
String getFrequency()
return getChoice("frequency", frequency)
String getType()
return getChoice("type", type)
也许这个解决方案更可行:
class MyEntity:
String name
final static private Something? frequencyChoices = {1000, 2000, 3000}, {"BSD", "Apache", "GPL"}
Integer frequency
final static private String[] typeChoices = new String[] {"BSD", "Apache", "GPL"}
Integer type
@Choices(MyEntity.frequencyChoices)
String getFrequency()
return frequency)
@IntervalChoices(MyEntity.typeChoices)
String getType()
return type
* get ** accessors根据此表返回字符串。
value(type) HumanReadableString(type)
1 BSD
2 Apache
3 GPL
min frequency max frequency HumanReadableString(frequency)
0 1000 rare
1000 2000 frequent
2001 3000 sexy
应该可以获取属性可以采用的所有可能值,例如:
getChoices(MyEntity, "type") returns ("rare", "frequent", "sexy")
应该可以从字符串中获取绑定值:
getValue(MyEntity, "frequency", "sexy") returns (2000,3000)
编辑: 所有这些的目的 这种方法应该简化表单和请求的生成(当然这不应该是视图实现结合的)
编辑:添加了我想告诉Java一些属性是spécial的信息,以便它可以相应地生成get * accessors。
编辑:添加了如何在代码中提交选项
编辑:我在数据库中存储的唯一内容是整数,当我想要打印它们时,它们应该以某种方式转换为人类可读的字符串。
答案 0 :(得分:1)
您可以在枚举中获得其他信息:
public enum License {
GPL("GPL"),
APACHE("Apache License");
public License(String displayName) {
this.displayName=displayName;
}
String displayName;
}
根据需要添加其他功能,但仔细查看Enum类已经提供了哪些功能。
答案 1 :(得分:0)
你可以毫不费力地做到这一点(但请注意,数据库中的值将是枚举的ordinal()
值。所以:
public enum License { GPL, APACHE, BSD }
FrequencyChoices
可以进入@ElementCollection
。
如果您需要人类可读的值,您可能希望将您的Enum转换为普通类,并将其作为单独的表保留,以便您可以更轻松地将新许可添加到列表中...
@Entity
public class License {
@Id long id;
String name;
}
答案 2 :(得分:0)
我没有试图坚持这一点,但您可以尝试关注http://marekhalmo.blogspot.sk/2012/09/cool-java-enums.html
我会坚持使用枚举。