Java Enum可以在它们之间共享一些通用代码吗?

时间:2016-12-28 03:37:48

标签: java enums

我有两个枚举如下

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;
    }
}

两个枚举都需要一些值来表示它们。有没有办法让我们共享代码,ReadWrite"扩展"来自value的内容,而不是每个枚举,我需要getValuevalue等?可能一种方法是上课,但想想我们是否可以制作Enum"可扩展"?

2 个答案:

答案 0 :(得分:2)

不要打它;拥抱课程。

枚举通常代表某种形式的国家;也就是说,每个枚举值都与其具有特定的业务关联状态。您必须确定Read.PRIVATERead.PUBLIC真正代表的内容,但它们仍然是州。 Write.CREATEWrite.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...
}