我最近重新发现了使用打破标签。现在我想知道是否有可能从另一个班级回到标签。
我想要的例子:
label:
for (Product p : ProductList) {
if (p.getSet() == true) {
classHandler();
}
}
someFunction() {
break label;
}
当我输入这个时,我实际上尝试在我的Main
类中创建一个本地函数(所以我可以调用该函数)但是即使在那里我也遇到了undefined label: label
错误。
答案 0 :(得分:5)
如果破坏条件有问题,那么抛出异常将是正确的方法。
否则你应该做一些事情,比如返回一个标志,指示是否仍然应该处理其他产品并对你的循环做出反应。
正如您所注意到的那样,您甚至无法break
通过方法边界,这是良好的事情。 break
和continue
是强大的工具,但如果以错误的方式使用,可以轻松使代码混乱。例如,隐藏在巨大代码块中的break
很容易被遗漏,但如果在方法的最顶层使用continue
来跳过基于某些条件的迭代,则意图是很清楚。
答案 1 :(得分:1)
您要破解的标签必须在范围内。来自java sun文档:
带有标签标识符的break语句尝试转移控件 到具有相同标签的封闭标签声明(第14.7节) 标识符作为其标签;这句话,叫做休息 目标,然后立即正常完成。在这种情况下,休息 target不需要是while,do,for或switch语句。休息 声明必须参考紧邻的标签 方法或初始化程序块。 没有非本地跳转
答案 2 :(得分:0)
答案 3 :(得分:0)
没有意义,因为不能保证标签存在,甚至不能在循环中调用someFunction()。