Java 级联枚举?
在我的项目中,我有这样的课程:
class Statut {
String satDomain;
String staCode;
}
但是使用字符串并不是我想要的。它过于宽松,并且使用常量是不够的。
我想使用枚举,但发现一个问题:
class Statut {
Domain satDomain;
StatutCode staCode;
}
enum Domain { }
enum StatutCode { }
此解决方案要好得多,但您可以设置不在所选域中的 StatutCode。
您在项目中找到解决此类问题的方法了吗?
感谢您的帮助
弗鲁米尼斯
In my project, I have such class :
class Statut {
String satDomain;
String staCode;
}
But working with Strings is not what I want. It is too permisive and using constants is not enough.
I wanted to use enums but find a problem :
class Statut {
Domain satDomain;
StatutCode staCode;
}
enum Domain { }
enum StatutCode { }
This solution is far better, but you can set a StatutCode that is not in the selected Domain.
Did you find a solution in your project to such problem ?
Thank for your help
Fluminis
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
实际上对 Extraneon 的答案略有改进。
先定义
StatutCode
枚举,然后赋值EnumSet<法规代码>每个Domain
枚举值。然后在 Statut 构造函数中进行验证非常简单Actually slight improvement on extraneon's answer.
Define
StatutCode
enum first, and then assign EnumSet< StatutCode > to eachDomain
enum value. Then the validation is pretty simple inStatut
constructor我建议将您的字段设为
private
和final
并添加一个构造函数来验证构造的对象是否格式良好。I suggest making your fields
private
andfinal
and adding a constructor the verifies that the constructed object is well-formed.我通常不认为这是一个问题。如果运行时验证足够,或者从数据库中提取内容,我倾向于使用不可修改的验证 Map()`。
您可以在 Statut 上添加这样的验证器。创建像
setDomainAndStatutCode(Domain domain, StatutCode statutCode)
这样的唯一 setter 并检查输入是否有效。否则我会使用
enum DomainAndStatutCode
。当然,需要大量的工作和维护,所以这确实不是一个好的解决方案。如果数据集有限并且必须保证正确性,这可能会很好。I don't usually find that a problem. I tend to use a unmodifiable validation Map<Domain,StatutCode>()` if run-time validation is sufficient, or the contents is pulled from a database.
You could add such a validator on Statut. Make the only setter like
setDomainAndStatutCode(Domain domain, StatutCode statutCode)
and check whether the input is valid.Otherwise I'd use an
enum DomainAndStatutCode
. Lot's of work and maintenance of course, so really not a nice solution. Might be good if the dataset is limited and correctness is a must.