假设我有一个方法可以在线发布一些内容并返回代表成功/失败的 true/false。
但是,我的方法可能会在不同的步骤失败,例如:
我仍然希望该方法简单地返回一个 boolean 值,我也不喜欢让该方法只抛出异常并且每个调用者都必须将其包装在 try/catch 中的想法(我讨厌 try/catch,它是总是丑陋的)。
这个问题有标准的解决方案吗?
我想出的最佳解决方案是让它返回一个枚举,而不是具有不同的可能结果,然后调用者将有一个 switch 语句。有比这更好的解决方案吗?
编辑:我应该更清楚;这是一个 Android 应用程序,用户将在线发布评论,不同的错误将被翻译成用户的消息,例如“垃圾邮件,请稍候再尝试发布”
返回一个 enum
没问题。但是,如果您要从很多地方调用它,您将在多个区域使用相同的错误处理代码(即,相同的 switch
语句)。
也许一种方法是返回一个 boolean 值,但将特定的错误处理逻辑封装在错误处理程序中。所以你会像这样定义一个接口(interface):
interface PostErrorHandler {
void handle(...);
}
然后你就可以有具体的实现了:
public class SpamErrorHandler implements PostErrorHandler {
@Override
public void handle(...) {
... //code to deal with spam
}
}
您发布方法的签名将是:
public boolean post(String content, PostErrorHandler handler) {
...
}
然后您将根据错误从 post
中调用 handler.handle(...)
。
如果您仍然想传达发生的错误类型,您可以使用您提到的方法:返回一个枚举而不是 boolean 值。
就异常而言,不仅仅是丑陋,在这里使用异常是一个坏主意的主要原因是看起来这些类型的错误是预期的。如果是这样,您希望调用者以某种方式处理它们,并且它们似乎是您业务逻辑的一部分。但是使用异常并不是这些错误的正确方法。您通常希望仅在发生意外情况时才使用异常。如果您必须抛出异常,那么最好使用某种状态检查/检查方法来检查输入,以便在输入错误时提醒您。在那种情况下,您可以抛出异常(使其未被检查),因为情况是意外的,因为您希望调用者在调用方法之前使用状态检查方法。