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

Fra*_*ung 4 groovy

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

class MyClass {
    private final String foo
    private final Integer bar

    MyClass(String foo, Integer bar) {
        // wanted ctr body
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

在构造函数中,我想将参数分配给相应的字段防止空值。

我想知道是否有一种比相当冗长的方式来做这件事

assert foo != null
assert bar != null
this.foo = foo
this.bar = bar
Run Code Online (Sandbox Code Playgroud)

或者

this.foo = Objects.requireNonNull foo
this.bar = Objects.requireNonNull bar
Run Code Online (Sandbox Code Playgroud)

Szy*_*iak 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")
Run Code Online (Sandbox Code Playgroud)

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

在 Groovy 3 之前,必须手动实施此类防御性检查。