【发布时间】:2015-10-15 07:10:17
【问题描述】:
我有两个枚举,它们之间有一个映射。
枚举1:
public enum HttpMethodName
{
GET, POST, PUT, DELETE;
}
枚举2:
public enum ProtocolOperation {
CREATE(1), RETRIEVE(2), UPDATE(3), DELETE(4), NOTIFY(5);
private BigInteger operationId;
public BigInteger getOperationId() {
return operationId;
}
private ProtocolOperation(int operationId) {
this.operationId = BigInteger.valueOf(operationId);
}
}
枚举值的映射为:
Create--> POST
Retrieve--> GET
Update--> PUT
Delete--> DELETE
Notify---> POST
提供映射的一种方法是通过 binder 的名称创建 第三个枚举:
枚举 3:
CREATE(1, HttpMethodName.POST),
RETRIEVE(2, HttpMethodName.GET),
UPDATE(3, HttpMethodName.PUT),
DELETE(4, HttpMethodName.DELETE),
NOTIFY(5, HttpMethodName.POST);
另一种方法是只保留两个枚举并修改 Enum2 本身以进行映射。
哪种方法会更好??
我觉得在方法1中会有分离,虽然我觉得第三个枚举不是一个常量类型(这是枚举的主要目的),它将是一个活页夹。
需要注意的是,随着代码的增长,可能会出现更多绑定。例如,对于另一种类型的协议,可能存在与CREATE 等相关的第二个绑定。
【问题讨论】:
-
如果将来可能的绑定可能会增加,那么您应该将其视为一个实体。请详细解释一下这种可能的绑定。即 CREATE 将与什么绑定?
-
使用方法添加绑定可以让您灵活地稍后添加任何逻辑,请查看我的答案。
-
@BilboBaggins:所以可能有一些其他协议的值可能与
CREATE相关联。例如:CREATE(1, HttpMethodName.POST, SomeOtheProtocol.SOME_NAME) -
保留三个枚举、两个单独的类型和一个活页夹不是一个好主意吗?