Java 拥有枚举声明事项的顺序是一种不好的做法吗?
假设我有带有3个声明的enumJava 拥有枚举声明事项的顺序是一种不好的做法吗?,java,enums,Java,Enums,假设我有带有3个声明的enumAccessRole: public Enum AccessRole { Admin, User, ReadOnly; } 我使用这个枚举的序数值来表示“分层”访问角色的概念。比如说, if (currentRole.ordinal() < otherRole.ordinal()) { //We know currentRole has more user rights than otherRole, because it's
AccessRole
:
public Enum AccessRole
{
Admin,
User,
ReadOnly;
}
我使用这个枚举的序数值来表示“分层”访问角色的概念。比如说,
if (currentRole.ordinal() < otherRole.ordinal())
{
//We know currentRole has more user rights than otherRole, because it's ordinal is smaller.
}
if(currentRole.ordinal()
我不以序号的任何权限为基础,但在必要时使用序号对枚举值进行排序和比较(例如,在用户界面中,按序号将所有可能的访问角色从“多权限”排序为“有限权限”)
这很好,但我担心这还不清楚。如果任何其他开发人员在枚举的底部插入新的accessrole,而不是按正确的顺序插入,那么整个系统都会一团糟
有什么办法解决这个问题吗?这会对枚举声明施加一个顺序,但在代码语义上要明确顺序是重要的/正在使用的?如何向枚举添加一个整数属性,并记录它用于维护角色层次结构。这也允许在同一级别上定义两个角色。您应该关心。开发人员通常认为枚举的顺序并不重要 然而,添加另一个人工序号只会让事情变得更糟,因为现在您必须注意数字是不同的,而新排序的含义仍然不清楚 我认为在枚举中移动特权检查会有所帮助。因此,在枚举中有一个如下所示的方法:
public boolean includes(Role otherRole){
return (this.ordinal() < otherRole.ordinal())
}
public boolean includes(角色otherRole){
返回(this.ordinal()
现在可以添加测试了。而且每一位身价不凡的开发人员都会明白,更改枚举中的事物顺序实际上是业务逻辑的改变。虽然枚举顺序通常不被认为是重要的,但我处理这种情况的方法(如果它确实重要)是在源代码中添加一条显著的注释 当然,你不能防止程序员在没有阅读注释的情况下修改你的代码。但另一方面:
- 他们可能会以其他方式破坏您的代码,并且
- 最终,如果他们忽略了你的评论并因此破坏了代码,他们应该承担责任