我目前正在为 Java 编写一个小型参数检查库。检查以流畅的界面方式编写,如下所示:
Check.that(name).matches("hello .*!").hasLenghtBetween(0, 20);
Check.that(list).isNullOr().hasSize(0);
Check.that(args).named("arguments").isNotEmpty();
到目前为止,这些检查的语义是它们还隐式断言参数不为空。要允许 null,可以使用isNullOr()
第二个示例中的修饰符方法。
我要添加的下一件事是支持这样的检查反转:
Check.that(name).not().matches("hello .*!");
但是现在我觉得默认的 nullness 处理变得奇怪和不直观。反转测试的正确方法是现在允许 null 。要禁止 null,必须isNotNull()
明确地预先检查:
Check.that(name).isNotNull().not().matches("hello .*!");
因此,我正在考虑更改语义,以便始终需要显式检查空值。我知道一个也这样做的项目:Bean Validation。但不利的一面是,这可能会使大约 90% 的检查长 12 个字符,因为 null 通常是无效的参数。
所以,长话短说:支持和反对隐式空值检查的论据是什么?也许有任何其他库或标准可以这样做或以其他方式做到这一点?