构建返回结果枚举

我正在寻找一种可以高效/优雅地构造Java枚举的方法。这些枚举保存返回结果。

  • 有一些功能,例如“删除项目”(枚举:OK,DOEsnT_EXIST,accESS_DENIED ..)或创建项目(确定,ALREADY_EXISTS,accESS_DENIED ..),changeItem(确定,INVALID_PARAMETER,INVALID_CLASS,accESS_DENIED)
  • 如您所见,它们具有自己的枚举和共享的枚举。因此,在每个返回函数中都应实现一些枚举(OK,accESS_DENIED),而其他的则应互斥(DOEsnT_EXIST,ALREADY_EXISTS ...)。
  • 还有一些复杂的函数,例如changeOrCreate,如果不存在则可以在其中创建项目,否则可以进行其他更改(枚举:所有createItem枚举,所有changeItem枚举)。

基本上我可以

  1. 为每个函数(createItemResult,changeItemResult ..)或
  2. 构建不同的枚举
  3. 将它们全部放入一个RESULT枚举类。

但是无论我选择什么,我都无法完成所有这些

  • 当诸如“ changeOrCreate”之类的复杂函数失败时,我想知道返回的枚举“ accESS_DENIED”是由创建还是由更改引起的。
  • 我非常希望任何具有相同enumType的函数的调用者
  • (我希望函数no能够返回非法枚举,例如:createUser不应具有DOEsnT_EXIST)

有什么想法吗?还是返回类型枚举有任何约定?

更新: 我不能使用(Non-Standard-)Exceptions的原因是我必须提供一个API,并且要求不能抛出任何异常。

justcc 回答:构建返回结果枚举

当像“ changeOrCreate”这样的复杂函数失败时,我想知道返回的枚举“ ACCESS_DENIED”是由创建还是由更改引起的。

然后将其命名为CREATE_DENIEDCHANGE_DENIED,或类似的名称。

我非常希望任何具有相同enumType的函数的调用者

您建议的一个RESULT枚举类也是如此。

我希望函数no能够返回非法枚举。

由于您正在编写函数,因此可以控制它返回哪个枚举,即,确保createUser从不返回DOESNT_EXIST

,

似乎您正在Java中使用HTTP状态代码,尽管这对于您的程序可以很好地工作,但这不是编写Java程序的绝妙方法。

Java的异常有两个原因(我知道):

  • 发生了意外情况,程序不知道如何处理。您的工作:将其扔到下一层〜!
  • 发生了预期的事情,因此您将其捕获并解决。

由于您期望发生异常,因此这对您意味着:

为您的枚举实例创建一些类,例如UserNotAuthorizedException(或仅使用内置的AuthenticationException),然后将它们扔到程序中。

如果您想知道谁没有访问权限,则可以选择带有异常参数的参数(每个用例的ID,失败的实例(可以包括静态类型),甚至是字符串。由您决定),您可以创建一个子类...

最终,Java喜欢类。

本文链接:https://www.f2er.com/2397973.html

大家都在问