可能打破其他班级?

时间:2011-10-14 11:53:24

标签: java label break

我最近重新发现了使用打破标签。现在我想知道是否有可能从另一个班级回到标签。

我想要的例子:

Main.class

label:
for (Product p : ProductList) {
 if (p.getSet() == true) {
  classHandler();
 }
}

Classhandler.class

someFunction() {
 break label;
}

当我输入这个时,我实际上尝试在我的Main类中创建一个本地函数(所以我可以调用该函数)但是即使在那里我也遇到了undefined label: label错误。

4 个答案:

答案 0 :(得分:5)

不,你不能。你不应该。

如果破坏条件有问题,那么抛出异常将是正确的方法。

否则你应该做一些事情,比如返回一个标志,指示是否仍然应该处理其他产品并对你的循环做出反应。

正如您所注意到的那样,您甚至无法break通过方法边界,这是良好的事情。 breakcontinue是强大的工具,但如果以错误的方式使用,可以轻松使代码混乱。例如,隐藏在巨大代码块中的break很容易被遗漏,但如果在方法的最顶层使用continue来跳过基于某些条件的迭代,则意图是很清楚。

答案 1 :(得分:1)

您要破解的标签必须在范围内。来自java sun文档:

  

带有标签标识符的break语句尝试转移控件   到具有相同标签的封闭标签声明(第14.7节)   标识符作为其标签;这句话,叫做休息   目标,然后立即正常完成。在这种情况下,休息   target不需要是while,do,for或switch语句。休息   声明必须参考紧邻的标签   方法或初始化程序块。 没有非本地跳转

答案 2 :(得分:0)

不,你不能。这甚至不适用于同一类的两个方法之间。标签的范围(最多)在一个方法中。

答案 3 :(得分:0)

没有意义,因为不能保证标签存在,甚至不能在循环中调用someFunction()。