从 Java 中的方法返回状态标志和消息的最佳方式

2022-09-01 12:04:04

我有一个看似简单的场景,我想要一个简单的解决方案,但哪个是“最正确”或“最Java”并不明显。

假设我在某个类中有一个小的身份验证(客户端客户端)方法。身份验证可能由于多种原因而失败,我想为控制流返回一个简单的布尔值,但也要为用户返回一个 String 消息。这些是我能想到的可能性:

  • 返回一个布尔值,并传入 StringBuilder 以收集消息。这是最接近C风格的方式。
  • 引发异常而不是返回 false,并包含该消息。我不喜欢这样,因为失败并不例外。
  • 创建一个名为 AuthenticationStatus 的新类,其中包含布尔值和字符串。对于一个小方法来说,这似乎有点过分了。
  • 将消息存储在成员变量中。这将引入一个潜在的竞争条件,我不喜欢它暗示一些实际上不存在的状态。

还有其他建议吗?

编辑错过了此选项关闭

  • 返回 null 表示成功 - 这不安全吗?

编辑溶液:

我选择了最OO的解决方案,并创建了一个小的AuthorationResult类。我不会用任何其他语言做到这一点,但我喜欢用Java。我也喜欢返回String[]的建议,因为它就像空返回一样,但更安全。Result 类的一个优点是,如果需要,您可以获得包含更多详细信息的成功消息。


答案 1

返回一个同时包含布尔标志和字符串的小对象可能是最像OO的方式,尽管我同意对于像这样的简单情况来说,这似乎有些过分。

另一种方法是始终返回一个 String,并让 null(或空 String - 你选择哪个)表示成功。只要在javadocs中清楚地解释了返回值,就不应该有任何混淆。


答案 2

您可以使用例外....

try {
    AuthenticateMethod();
} catch (AuthenticateError ae) {         
    // Display ae.getMessage() to user..
    System.out.println(ae.getMessage());
    //ae.printStackTrace();    
}

然后,如果身份验证方法中发生错误,则发送新的身份验证错误(扩展异常)