我正在寻找一种能够以高效/优雅的方式构造java枚举的方法。这些枚举保存返回结果。
- 有“删除项目”(枚举:OK、DOESNT_EXIST、ACCESS_DENIED..)或创建项目(OK、ALREADY_EXISTS、ACCESS_DENIED..)、changeItem(OK、INVALID_PARAMETER、INVALID_CLASS、ACCESS_DENIED)等功能
- 如您所见,它们都有自己的和共享的枚举。因此,一些枚举应该在每个返回函数中实现(OK,ACCESS_DENIED),而其他枚举则是独占的(DOESNT_EXIST,ALREADY_EXISTS ...)。
- 此外,还有像changeOrCreate这样的复杂函数,如果项目不存在,则可以在其中创建项目,否则可以进行更改(枚举:所有createItem枚举,所有changeItem枚举)。
基本上我可以
- 为每个函数构建不同的枚举(createItemResult、changeItemResult..)或
- 将它们全部放入一个 RESULT 枚举类中。
但无论我选择什么,我都永远无法完成所有这些
- 当像“changeOrCreate”这样的复杂函数失败时,我想知道返回的枚举“ACCESS_DENIED”是由创建还是更改引起的。
- 我非常希望任何函数的调用者获得相同的 enumType
- (我希望函数 no 能够返回非法枚举。例如:createUser 不应该有 DOESNT_EXIST)
有什么想法吗?或者返回类型枚举有什么约定吗?
更新: 我不能使用(非标准)异常的原因是我必须提供一个 API,并且要求不能抛出任何异常。
最佳答案
When a complex function like "changeOrCreate" fails, I want to know whether the returned enum "ACCESS_DENIED" was caused by the creation or the change.
然后将它们命名为 CREATE_DENIED
和 CHANGE_DENIED
或类似名称。
I would highly prefer the caller of any function getting the same enumType
所以执行您建议的一个 RESULT 枚举类。
I would prefer the functions no to be able to return illegal enums.
由于您正在编写函数,因此您可以控制它返回哪个枚举,即您确保 createUser
永远不会返回 DOESNT_EXIST
。
关于java - 构造返回结果枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61330089/