当循环和 case 语句嵌套时,带标签的中断就会出现。这是我在过去 6 个月中写的一些 Java 示例,经过删节:
Node matchingNode = null; //this is the variable that we want to set
Iterator<Resource> relatedNodes = tag.find();
outer:
while (relatedNodes.hasNext() && matchingNode == null) {
Node node = relatedNodes.next().adaptTo(Node.class);
if (honorIsHideInNav && NodeUtils.isHideInNav(node)) {
//we don't want to test this node
continue; //'continue outer' would be equivalent
}
PropertyIterator tagIds = node.getProperties("cq:tags");
while (tagIds.hasNext()) {
Property property = tagIds.nextProperty();
Value values[] = property.getValues();
for (Value value : values) {
String id = value.getString();
if (id.equals(tag.getTagID())) {
matchingNode = node; //found what we want!
break outer; //simply 'break' here would only exit the for-loop
}
}
}
}
if (matchingNode == null) {
//we've scanned all of relatedNodes and found no match
}
我使用的 API 提供的数据结构有点粗糙,因此嵌套复杂。
你总是可以设置一个标志来控制你的循环退出,但我发现明智地使用标记的中断可以使代码更简洁。
发布脚本:此外,如果我的代码检查团队和/或商店编码标准要禁止标签,我很乐意重写以符合要求。