如何在 Xtend 中的任意点保留 void 方法

How to leave a void method at an arbitrary point in Xtend

我想在 Xtend 中做一件非常简单的事情,但不知道怎么做。我有一个 return 类型 void 的方法。在方法的开头检查一个条件并要离开该方法,如果条件不满足,则继续。这是代码的摘录:

def private void generateODB(BlockDeclaration block) {
   val relevantTypes = block.nestedElements.filter[...]

   // nothing to do: leave!
   if (relevantTypes.empty)
      return

   // ...otherwise do some business logic
}

但是,我得到 return 语句的异常 "Void methods cannot return a value."。当然,我可以在方法主体的其余部分周围做一个巨大的 if 块,但难道就不能在此时离开该方法吗? Xtend 中正确的语法是什么?

我们真的应该就这里的错误提供更好的错误消息。 这里的问题是,

someCode
if (somePredicate) 
   return
someOtherCode

被解释为

someCode
if (somePredicate) 
   return someOtherCode

所以编译器抱怨 someOtherCode 被 returned 的结果。

添加一个分号或一个块来告诉编译器你的意思: IE。: 如果(somePredicate){ return } 要么: 如果(某些谓词) return;

由于您没有将条件语句的 then 块(即 return 语句括在大括号中,例如

if (relevantTypes.empty) {
      return
}

或用分号终止return语句,Xtend认为

return

...

一条语句。添加一个分号或将 then 块用大括号括起来,你会没事的。 :-)