强制尝试块在两者之间中断的最佳方法是什么?

tip*_*low 6 java blackberry try-catch break

我有try- catch块,我希望breakswitch块,但我找不到这样做的推荐方式.我在try- catch块中获取了大量数据,并且希望在满足某个条件的情况下停止其间的提取.为了让它现在正常工作,我故意强迫代码进入catch块:

int i=0;
    try {
        //--do stuff----
        if(//-------is condition met?--------//)
            i = 1/0; // divide 1 by 0 -- a definite exception
    }
    catch (Exception e) {//---------do nothing---------//}
Run Code Online (Sandbox Code Playgroud)

这样做是否安全还是我应该采取其他方式?

编辑:我正在获取一些xml数据(实际上,很多).根据互联网连接,我需要在某个时间(超时)之后停止解析,而不是通过整个流.我经历了循环,但我稍后也做了一些计算.用不完整的数据计算没有任何意义,所以我宁愿跳过整个事情.

mae*_*ics 11

这段代码闻起来有些反模式但没有更多的上下文,我们无法规定更好的设计.一般情况下,您应该只为程序状态中的异常条件抛出异常.您应该特别不要为正常(预期)控制流抛出异常,而应该使用控制流语句,例如循环(使用break/ continue)和return.

如果你确实希望保留这个结构(即使你不应该),那么我建议明确地抛出一个特殊的异常类来清楚你正在做什么,例如:

public static class ConditionMetException extends Exception { }

// ...
try {
  // do stuff
  if ( /* Is condition met? */ ) {
    throw new ConditionMetException();
  }
} catch (ConditionMetException cme) { /* Do nothing. */ }
Run Code Online (Sandbox Code Playgroud)

但同样,你可能最好还是重构使用循环和内置break命令.


Kev*_*imm 5

要么break要么throw会做你想做的事(而且throw会更好,你至少对你正在做的事情有一些可追溯性。

[编辑]

what: try {
         System.out.println ("before break");
         break what;

      } catch (Exception e) {}
   }
Run Code Online (Sandbox Code Playgroud)

[/编辑]