try...catch我的代码在某处有一个构造:
try {
// Some code.
} catch (Exception e) {
if (condition) {
// Break out of catch block.
}
// Continue catch block.
}
Run Code Online (Sandbox Code Playgroud)
如何标记我的catch块,以便可以break LABEL_NAME;代替编写// Break out of catch block.,以便执行try...catch完全退出该构造?
我希望能够在catch关键字之前放置标签:
try { }
LBL: catch(Exception e) { }
Run Code Online (Sandbox Code Playgroud)
因为标签在许多其他语言结构(例如LBL: if(...或LBL: for(...)中会位于关键字之前,但会引起语法错误。
我也无法在catch(Exception e)代码后放置标签。
这个问题纯粹是出于好奇的人们如何能在Java中实现这一点。我非常清楚,还有其他方法可以控制代码块中的执行流程。
如果我曾经碰到这些代码已经贴上了catch使用标签从块或一些类似的块,和休息,我想知道到底是什么代码在做什么,它是如何做的。
关于您是否应该使用标签的评论,我在辩论中的立场:我的立场是不惜一切代价避免,除非替代方案更糟。
在这种情况下,似乎最简单的是反转条件:
try {
// Some code.
} catch (Exception e) {
if (!condition) {
// Continue catch block.
}
}
Run Code Online (Sandbox Code Playgroud)
假设Continue catch block代码不是很大(这本身是不希望的),这似乎比包含标签要好。
就像Kröw答案的替代方法一样,虽然您不能标记a catch(因为它不是语句),但是您可以在catch(因为语句是语句)中定义标记的块:
try {
// Some code.
} catch(Exception e) {
LABEL:
{
if (condition) {
break LABEL;
}
// Remaining code.
}
}
Run Code Online (Sandbox Code Playgroud)
这很粗糙,但是具有标签更靠近中断的优点(例如,如果“ // Some code”很长,可能不清楚您要中断的内容)。
但是,如果您在此处引入额外的缩进级别,则最好也使用它来if (!condition)代替。
要突破catch,try需要标记为:
LABEL: try {
// Some code.
} catch(Exception e) {
if(condition) {
break LABEL;
}
// Remaining code.
}
Run Code Online (Sandbox Code Playgroud)
同样,我确定此代码还有很多更好的替代方法,但这可以回答问题的明确要求。
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |