gpt4 book ai didi

nullpointerexception - XTend 空安全抛出 NullPointerException

转载 作者:行者123 更新时间:2023-12-05 03:13:13 27 4
gpt4 key购买 nike

我正在将我的模板代码移植到 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,测试将失败并显示“未通过”消息。但是将 isNotNull 方法的返回类型简单更改为 Boolean(包装器):

def Boolean isNotNull(Object o) {
return o != null
}

因 NullPointerException 而失败。检查为此生成的 java 代码,我可以看到 XTend 使用中间 bool 对象表达式,这就是 NPE 的原因。我是否遗漏了 XTend 空安全运算符 (?.) 的要点,或者我不能在运算符之后使用这样的方法?

谢谢。

最佳答案

运算符(operator)行为正常。抛出异常是因为在 if 表达式中使用了 bool 值,这需要自动拆箱。

如果您尝试以下操作:

@Test
def xtendIfTest() {
val Boolean obj = null
if (obj) {
return
}
fail("Not passed")
}

您还会遇到 NullPointerException。

这符合 Java 语言规范 (https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.8) - 当需要自动拆箱时,这会产生 NullPointerException:

@Test
public void test() {
Boolean value = null;
if (value) { // warning: Null pointer access: This expression of type Boolean is null but requires auto-unboxing
// dead code
}
}

希望对您有所帮助。

关于nullpointerexception - XTend 空安全抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30814510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com