【问题标题】:Is it bad form to intentionally throw an exception? [closed]故意抛出异常是不好的形式吗? [关闭]
【发布时间】:2013-01-17 19:29:56
【问题描述】:

做一些你知道会引发异常的事情(假设你处理得当)是不是很糟糕?例如:

 JSONArray stuff = new JSONArray();
 JSONArray otherStuff = new JSONArray();
 try{
     for(i = 0; i < stuff.length(); i++){
         JSONObject a = stuff.getJSONObject(i);
         otherStuff.add(a);          
      }
 } catch (JSONException e){
     Log.e("FAIL", e.toString());
 }

//more code adding things to array later on

在这种情况下,当您第一次运行序列时,数组将为空,并且 getJSONObject 会抛出异常,因为索引 i 处没有任何内容。但是,稍后,如果将事物添加到数组中,它不会抛出异常。

当然,这段代码只是一个假设(我相信有更好的例子——有人可能有),但就形式/风格而言,是否可以故意抛出异常?还是应该避免将它们全部放在一起?

【问题讨论】:

  • 没关系,但一般不应该。这个post
  • 我不同意这没关系,但同意该帖子中的内容
  • 当前样本不会抛出。您不会进入循环,因为 stuff.length() == 0。也就是说,仅记录通常不是正确的异常处理。案例要么是有效的,应该正常处理,要么不是,你应该做的不仅仅是忽略它。
  • 好吧,我的例子很糟糕。我试图想出一些东西来说明这个问题。我想我想了解的异常应该仅用于指示发生了不好的事情,或者在记录错误消息等之外是否有合法目的。
  • 它们通常不仅仅用于记录错误消息。例如,如果一个流因意外原因而死亡,您需要捕获它,干净地关闭它,然后返回到有效状态。您还想记录,但这通常不是主要目标。异常处理通常需要处理,这通常意味着不仅仅是忽略或记录。

标签: java android json exception


【解决方案1】:

根据我的经验,使用异常作为流控制通常被认为是不好的做法。它们应保留用于特殊情况。

【讨论】:

  • 可以说例外只适用于例外情况(坏笑话)
  • 是的,这就是我选择例外这个词的原因,我只是让它低调了一点:)
【解决方案2】:

在我看来,如果仅在例外情况下抛出异常而不是作为常规方式,例如退出循环。

但请注意:创建、抛出和捕获异常并不快。

=> 如果可能(并且不太复杂,我强烈建议不要使用异常。

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多