相关疑难解决方法(0)

何时选择已检查和未检查的例外

在Java(或任何其他具有已检查异常的语言)中,在创建自己的异常类时,如何确定是应该选中还是取消选中它?

我的直觉是,如果调用者能够以某种富有成效的方式恢复,那么将调用一个已检查的异常,其中未经检查的异常对于不可恢复的情况更多,但我会对其他人的想法感兴趣.

java exception checked-exceptions

197
推荐指数
10
解决办法
5万
查看次数

Java或C#中的异常管理的最佳实践

我一直在决定如何在我的应用程序中处理异常.

如果我的异常问题来自1)通过远程服务访问数据或2)反序列化JSON对象.不幸的是,我不能保证这些任务中的任何一个都成功(切断网络连接,不正确的JSON对象,这是我无法控制的).

因此,如果我遇到异常,我只需在函数内捕获它并返回FALSE给调用者.我的逻辑是,所有调用者真正关心的是任务是否成功,而不是为什么它不成功.

这是典型方法的一些示例代码(在JAVA中)

public boolean doSomething(Object p_somthingToDoOn)
{
    boolean result = false;

    try{
        // if dirty object then clean
        doactualStuffOnObject(p_jsonObject);

        //assume success (no exception thrown)
        result = true;
    }
    catch(Exception Ex)
    {
        //don't care about exceptions
        Ex.printStackTrace();
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我认为这种方法很好,但我真的很想知道管理异常的最佳实践是什么(我应该在调用堆栈中一直冒出异常吗?).

总结关键问题:

  1. 是否可以捕获异常但不会冒泡或正式通知系统(通过日志或通知用户)?
  2. 对于不会导致所有需要try/catch块的异常的最佳实践有哪些?

跟进/编辑

感谢所有反馈,在网上找到了一些关于异常管理的优秀来源:

似乎异常管理是根据上下文而变化的事情之一.但最重要的是,人们应该如何管理系统中的异常.

另外注意通过过多的尝试/捕获代码腐烂或不给予例外它的尊重(例外是警告系统,还需要警告什么?).

此外,这是m3rLinEz的一个很好的选择评论.

我倾向于同意Anders Hejlsberg和你的看法,大多数来电者只关心操作是否成功.

从这个评论中,它提出了一些在处理异常时要考虑的问题:

  • 抛出此异常有什么意义?
  • 处理它有什么意义?
  • 呼叫者是否真的关心异常,还是只关心呼叫是否成功?
  • 是否强制调用者管理潜在的异常优雅?
  • 你是否尊重这种语言的含义?
    • 你真的需要返回像布尔这样的成功标志吗?返回boolean(或int)更像是一种C心态而不是Java(在Java中你只是处理异常).
    • 遵循与语言相关的错误管理结构:)!

c# java error-handling exception

117
推荐指数
5
解决办法
3万
查看次数

例外与否?如果"是" - 检查与否?

我认为这涉及到一个广泛的主题,但是当一切都以最佳方式完成时,除了理想的变体之外,处理程序工作流程的最佳方法是什么.

让我们更具体一点:

一个类有一个方法,该方法对其参数进行操作并返回结果.例如:

public Map<Object,OurObject> doTheWork(OtherObject oo);
Run Code Online (Sandbox Code Playgroud)

我排除的一个可能的结果是,null如果有其他方式,但理想的回归.

处理这种情况有正确的方法("银弹",或所谓的"最佳实践")吗?

我看到其他三个结果:

1 - 该方法返回EMPTY_MAP;

2 - 该方法检查了异常;

3 - 抛出RuntimeException;

如果对该问题没有一般正确答案 - 应该考虑哪些条件?

关于设计的合同原则(简单地说,该方法的责任是照顾输出,假设输入参数是正确的) - 是正确的方法来抛出任何异常或最好是空车返回的结果,但正确在结构中(例如,不为null)

language-agnostic oop exception-handling

1
推荐指数
1
解决办法
153
查看次数