我有两个相关的枚举:
Enum1:
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;
}
}
Enum2:
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;
}
}
例如,这两个枚举值在映射中相关
协议状态代码2000(OK)具有200(OK)映射.
因此,在我的代码中,我将获得ProtocolStatusCode(2000)并且对应于我将需要HttpStatusCode(200).
我正在考虑将ProtocolStatusCode枚举维护为
ACCEPTED(1000, 202),
OK(2000, 200)
因此,当我得到2000时,我将反向查找枚举以获得OK,然后调用getter以获得与2000相关的第二个值(200).
有更好的方法??
解决方法:
你可以在第二个枚举中添加一个字段,这是第一个枚举的类型.然后,您不必搜索第一个枚举数组以查找正确的对象.就像是:
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;
}
}
因此,如果B enum中的代码是唯一的,您可以实现像getBbyCode()这样的方法,然后你也有B.A.
标签:java,enums
来源: https://codeday.me/bug/20190623/1272314.html