Groovy中对构造函数参数进行空值检查的方式

4

我想将非空值注入到我的 Groovy 类中。

class MyClass {
    private final String foo
    private final Integer bar

    MyClass(String foo, Integer bar) {
        // wanted ctr body
    }
    ...
}

在构造函数中,我希望将params分配给各自的字段并防止null值。

我想知道是否有比相当冗长的方法更加优雅的方式来实现这一点。

assert foo != null
assert bar != null
this.foo = foo
this.bar = bar

或者

this.foo = Objects.requireNonNull foo
this.bar = Objects.requireNonNull bar
2个回答

9
如果您使用Groovy 3,可以使用@NullCheck注释,它会为构造函数(或任何方法)的参数添加防御性条件。
import groovy.transform.NullCheck

@NullCheck
class MyClass {
    private final String foo
    private final Integer bar

    MyClass(String foo, Integer bar) {
        this.foo = foo
        this.bar = bar
    }
}

// Examples:
new MyClass("test", null) // throws IllegalArgumentException("bar cannot be null")

new MyClass(null, "test") // throws IllegalArgumentException("foo cannot be null")

当你在类定义级别添加@NullCheck时,防御性的空指针检查将应用于所有构造函数和方法。或者,你可以将@NullCheck注解添加到你想要使用此空指针检查的方法(或构造函数)中。

在Groovy 3之前,这些防御性检查必须手动实现。


1

这里只有一个重要的细节,因为 @NullCheck 注解仅适用于显式方法和构造函数,正如官方文档所示。

http://docs.groovy-lang.org/next/html/gapi/groovy/transform/NullCheck.html

如果放置在类级别,所有显式方法和构造函数都将被检查。
如果您使用其他注释(如@TupleConstructor),所有隐式方法和构造函数都不会检查参数是否为null。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接