Lombok @NonNull 不对返回类型应用检查

Dol*_*ava 6 intellij-idea lombok junit5

IDE:Intellij

我使用 Lombok 的 NonNull 注释自动生成空指针检查并在方法参数和返回类型上引发异常。

在编写单元测试时,“null”方法参数确实会引发异常,但 null 返回类型不会引发异常。

import lombok.NonNull;
public @NonNull String function( @NonNull String input) {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

以下测试失败:

@Test
public void 
whenReturnTypeIsNull_ThenIllegalArgumentExceptionIsThrown(){
    assertThrows(IllegalArgumentException.class, ()-> testClass.function() );
}
Run Code Online (Sandbox Code Playgroud)

随着消息:

Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown
Run Code Online (Sandbox Code Playgroud)

tma*_*wen 7

Lombok项目 文档明确指出,该NonNull注释允许为构造函数和方法参数生成样板空检查:

您可以在方法或构造函数的参数上使用@NonNull,让 lombok 为您生成 null 检查语句。

因此,您应该以编程方式检查返回值不变量,包括非空值。

  • @DolphinJava Lombok 作者在这里:Lombok 不想添加运行时依赖项,并且 lombok 允许您控制抛出的异常以及生成的消息,这意味着不可能使用 `Objects.requireNonNull` 。因此,所有的 return 语句需要拆分成 3 条语句(`return X;` 变成 `T $foo = X; if ($foo == null) throw ...; return $foo;`),需要类型解析,介绍牙套,yadayada。太复杂了,无法可靠地做到这一点。 (4认同)