我有两个枚举如下
public enum Read {
PRIVATE (1), PUBLIC(2);
private final int value;
Read(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
和
public enum Write {
CREATE (1), UPDATE(2);
private final int value;
Write(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
两个枚举都需要一些值来表示它们。有没有办法让我们共享代码,Read
和Write
"扩展"来自value
的内容,而不是每个枚举,我需要getValue
,value
等?可能一种方法是上课,但想想我们是否可以制作Enum"可扩展"?
答案 0 :(得分:2)
不要打它;拥抱课程。
枚举通常代表某种形式的国家;也就是说,每个枚举值都与其具有特定的业务关联状态。您必须确定Read.PRIVATE
和Read.PUBLIC
真正代表的内容,但它们仍然是州。 Write.CREATE
和Write.UPDATE
也是如此。
现在真正的问题是,这两个枚举如何相互关联?他们可能不这样做,因为阅读某些内容是独立的,可以通过写作来分离。
在这个例子中,我可能会在一个类中代表它:
public class Permission {
private Read readState;
private Write writeState;
public void setReadState(Read readState) {
this.readState = readState;
}
public void setWriteState(Write writeState) {
this.writeState = writeState;
}
}
目前还不清楚这些值会代表什么,因为枚举可以保证是独一无二的,但请从中获取。
答案 1 :(得分:2)
您可以使用EnumSet来保存这样的权限:
public enum Permission {
READ_PRIVATE, READ_PUBLIC, WRITE_CREATE, WRITE_UPDATE;
}
public class User {
private final EnumSet<Permission> permissions;
public User(Permission... permissions) {
this.permissions = EnumSet.copyOf(Arrays.asList(permissions));
}
public boolean hasPermission(Permission permission) {
return permissions.contains(permission);
}
public void addPermisssion(Permission p) {
permissions.add(p);
}
public void removePermisssion(Permission p) {
permissions.remove(p);
}
}
User user = new User(Permission.READ_PRIVATE, Permission.WRITE_UPDATE);
if ( user.hasPermission(Permission.WRITE_UPDATE) )
{
//do something...
}