我正在把我的模板代码移植到XTend。 在某个测试用例中,我有这种类型的条件处理:
@Test
def xtendIfTest() {
val obj = new FD
if (true && obj?.property?.isNotNull) {
return
}
fail("Not passed")
}
def boolean isNotNull(Object o) {
return o != null
}
class FD {
@Accessors
String property
}
这个测试本来应该是通过的,因为属性是 null,测试会以“Not passed”的消息失败。但是只需将isNotNull方法的返回类型简单更改为Boolean(包装类):
def Boolean isNotNull(Object o) {
return o != null
}
出现了NullPointerException错误。检查生成的Java代码,我发现XTend使用了一个中间的布尔对象表达式,这就是NPE的原因。我是否没有理解XTend的空安全运算符(?.)的重点,或者我不能在运算符之后使用这样的方法?
谢谢。