Groovy空检查构造函数参数的方法

Groovy空检查构造函数参数的方法,groovy,Groovy,我想将非空值注入groovy类 class MyClass { private final String foo private final Integer bar MyClass(String foo, Integer bar) { // wanted ctr body } ... } 在构造函数中,我希望将参数分配给相应的字段并防止空值 我想知道是否有一种比非常冗长的 assert foo != null assert bar !=

我想将非空值注入groovy类

class MyClass {
    private final String foo
    private final Integer bar

    MyClass(String foo, Integer bar) {
        // wanted ctr body
    }
    ...
}
在构造函数中,我希望将参数分配给相应的字段并防止空值

我想知道是否有一种比非常冗长的

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


如果使用Groovy 3,则可以使用添加防御条件构造函数(或任何方法)参数的注释

导入groovy.transform.NullCheck
@空支票
类MyClass{
私人最终字符串foo
专用最终整型条
MyClass(字符串foo、整型条){
this.foo=foo
this.bar=bar
}
}
//示例:
新建MyClass(“test”,null)//抛出IllegalArgumentException(“bar不能为null”)
新建MyClass(null,“test”)//抛出IllegalArgumentException(“foo不能为null”)
当您在类定义级别添加
@NullCheck
时,防御性的null检查将应用于所有构造函数和方法。或者,您可以将
@NullCheck
注释添加到只希望使用此空检查的方法(或构造函数)中


在Groovy 3之前,这种防御检查必须手动执行。

这只是一个重要的细微差别,因为@NullCheck注释只适用于显式的方法和构造函数,正如官方文档中所指出的那样

如果放置在类级别,将检查所有显式方法和构造函数

如果将其他注释用作@TupleConstructor,则所有隐式方法和构造函数都不会检查参数是否不为null

this.foo = Objects.requireNonNull foo
this.bar = Objects.requireNonNull bar