Groovy中如何为Record构造函数参数添加非空检查?
Groovy中Record参数非空校验的最简实现方式
在Groovy环境下,针对你定义的Person Record:
record Person(String firstName, String lastName, String city) {}
要确保三个构造参数均不为空,最简的实现方式是利用Groovy的紧凑构造器结合校验逻辑,以下是两种可行方案:
方案一:使用Groovy断言(开发阶段首选)
Groovy默认启用断言,代码最简洁,参数为空时会抛出AssertionError并携带自定义提示:
record Person(String firstName, String lastName, String city) { // 紧凑构造器,无需重复参数列表 Person { assert firstName != null : "firstName 不能为空" assert lastName != null : "lastName 不能为空" assert city != null : "city 不能为空" } }
方案二:使用Objects.requireNonNull(生产环境可靠)
如果生产环境需要关闭断言(Groovy可通过-ea/-da参数控制),可以用JDK自带的Objects.requireNonNull,确保参数为空时抛出NullPointerException:
import java.util.Objects record Person(String firstName, String lastName, String city) { Person { firstName = Objects.requireNonNull(firstName, "firstName 不能为空") lastName = Objects.requireNonNull(lastName, "lastName 不能为空") city = Objects.requireNonNull(city, "city 不能为空") } }
补充说明
Groovy的注解(如@CheckNull)对Record的自动生成构造器无效,因为Record的核心构造器是JDK自动生成的,注解无法直接干预。而通过自定义紧凑构造器,我们可以直接接管参数校验逻辑,这是最直接有效的方式。
内容的提问来源于stack exchange,提问作者Natasha
相关产品推荐
相关产品推荐

