映射两个相关的枚举?

Sid*_*kha 5 java enums

我有两个相关的枚举:

枚举1:

public enum HttpStatusCode {

    ACCEPTED(202),
    OK(200),
    CREATED(201),
    BAD_REQUEST(400),
    NOT_FOUND(404),
    METHOD_NOT_ALLOWED(405),
    REQUEST_TIMEOUT (408),
    FORBIDDEN(403),
    CONFLICT(409),
    INTERNAL_SERVER_ERROR(500),
    NOT_IMPLEMENTED(501);

    private int httpStatusCode;

    private HttpStatusCode(int name) {
        this.httpStatusCode = name;
    }

    public int getHttpStatusCode() {
        return httpStatusCode;
    }
}
Run Code Online (Sandbox Code Playgroud)

枚举2:

public enum ProtocolStatusCode {

    ACCEPTED(1000),
    OK(2000),
    CREATED(2001),
    BAD_REQUEST(4000)

private int protocolStatusCode;

    private ProtocolStatusCode(int protocolStatusCode) {
        this.protocolStatusCode = protocolStatusCode;
    }

    public int getStatusCode() {
        return protocolStatusCode;
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个枚举值在映射中相关,例如

协议状态码2000(OK)与200(OK)有映射。

因此,在我的代码中,我将获得 ProtocolStatusCode (2000),与此相对应,我将需要 HttpStatusCode (200)。

我正在考虑将 ProtocolStatusCode 枚举维护为

ACCEPTED(1000, 202),
    OK(2000, 200)
Run Code Online (Sandbox Code Playgroud)

因此,当我得到 2000 时,我将反向查找枚举以获取 OK,然后调用 getter 来获取与 2000 相关的第二个值 (200)。

还有更好的办法吗??

Ken*_*ent 4

您可以在第二个枚举中添加一个字段,它是第一个枚举的类型。然后您不必搜索第一个枚举数组来找到正确的对象。就像是:

enum A{
    A_FOO(1),
    A_BAR(2);
    private  int code;

    private A(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}

enum B{
    B_FOO(1000,A_FOO),
    B_BAR(2000,A_BAR);

    private int code;
    private A status;

    private B(int code, A status) {
        this.code = code;
        this.status = status;
    }

    public int getCode() {
        return code;
    }

    public A getStatus() {
        return status;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果 B 枚举中的代码是唯一的,您也可以实现像这样的getBbyCode()方法B.A