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

标签 java exception return-value

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

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

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

还有其他建议吗?

编辑错过了这个选项关闭

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

编辑解决办法:

我选择了最面向对象的解决方案并创建了一个小的 AuthenticationResult 类。我不会用任何其他语言来做这件事,但我喜欢用 Java 做。我也喜欢这个建议 返回 String[] 因为它类似于 null 返回但更安全。 Result 类的一个优点是,如果需要,您可以收到包含更多详细信息的成功消息。

最佳答案

返回一个带有 boolean 标志和内部字符串的小对象可能是最类似于 OO 的方式,尽管我同意这样的简单情况似乎有点过头了。

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

关于java - 从 Java 中的方法返回状态标志和消息的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356248/

相关文章:

java - JUnit 测试控制台多个用户输入 && 通过本应失败的测试

java - 如何检查java中发生的异常类型并相应地调用另一个方法?

java - 尝试使用 java 发送邮件时获取 javax.mail.NoSuchProviderException

c# - 在 C# 中查看返回值

java - 自定义 Bean 验证不适用于多个 Bean 类

java - 对 getter/setter 或 AtomicReference 使用 synhronize

c# - 为什么异常总是被接受为返回类型(抛出时)?

c++ - 返回本地作为值/引用

c - 如何从 C 函数中返回多个值?

java - 使方法等待按钮按下