我有下面的代码:这是迭代arrayList直到结束,尽管我不需要它。我不知道如何打破它,因为xtend没有break语句。如果我不能将其转换为while循环,那么在xtend中有没有类似于java中break语句的替代方法呢?
arrayList.forEach [ listElement | if (statusFlag){
if(monitor.canceled){
statusFlag = Status.CANCEL_STATUS
return
}
else{
//do some stuff with listElement
}
}]发布于 2016-09-30 22:19:19
你可以试试这样的东西
arrayList.takeWhile[!monitor.cancelled].forEach[ ... do stuff ...]
if ( monitor.cancelled ) { statusFlag = Status.CANCEL_STATUS }takeWhile是延迟执行的,所以它应该像预期的那样工作,并在正确的时刻中断(如果内存可见性允许,我希望monitor.cancelled是易失性的)。
不确定状态标志是如何进入图片的,你可能还需要在一个或两个闭包中添加对它的检查。
发布于 2016-09-28 00:01:22
你说得对,Xtend不支持break和continue。
因为看起来你想基于外部条件“中断”(所以你不能使用过滤),所以我认为抛出一个异常是一个不错的选择。
伪代码:
try {
arrayList.forEach[
if (monitor.canceled) {
throw new InterruptedException()
}
else {
// Continue processing
}
]
}
catch (InterruptedException e) {
// Handle
}发布于 2019-05-06 15:17:11
您说得对,Xtend不支持中断并继续。将break的特定功能移到java中,并在xtend中使用。
https://stackoverflow.com/questions/39727226
复制相似问题