【问题标题】:Lombok @NonNull Does Not Apply Check on Return TypeLombok @NonNull 不适用检查返回类型
【发布时间】:2019-06-25 14:48:06
【问题描述】:

IDE:Intellij

我正在使用 Lombok 的 NonNull 注解来自动生成 Null 指针检查并在方法参数和返回类型上抛出异常。

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

import lombok.NonNull;
public @NonNull String function( @NonNull String input) {
    return null;
}

以下测试失败:

@Test
public void 
whenReturnTypeIsNull_ThenIllegalArgumentExceptionIsThrown(){
    assertThrows(IllegalArgumentException.class, ()-> testClass.function() );
}

与消息:

Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown

【问题讨论】:

    标签: intellij-idea lombok junit5


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您提请我注意。嗯...我认为它适用于返回类型。我确实希望他们将来能够添加该功能。目前,我认为该功能有些不完整。
    • @DolphinJava Lombok 作者在这里:Lombok 不想添加运行时依赖项,并且 lombok 允许您控制抛出的异常以及产生的消息,这意味着使用 Objects.requireNonNull 是不可能的。所以需要把所有的return语句拆分成3条语句(return X;变成T $foo = X; if ($foo == null) throw ...; return $foo;),需要类型解析,引入大括号,yadayada。太复杂了,无法可靠地做到这一点。
    猜你喜欢
    • 2019-07-13
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2016-08-03
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多