我真的很喜欢 guava 库如何允许简单的单行代码检查 null:
public void methodWithNullCheck(String couldBeNull) {
String definitelyNotNull = checkNotNull(couldBeNull);
//...
}
可悲的是,对于简单的参数检查,您至少需要两行代码:
public void methodWithArgCheck(String couldBeEmpty) {
checkArgument(!couldBeEmpty.isEmpty());
String definitelyNotEmpty = couldBeEmpty;
//...
}
但是,可以添加可以进行参数检查并在检查成功时返回值的方法。以下是检查的示例以及如何实施:
public void methodWithEnhancedArgCheck(String couldBeEmpty) {
String definitelyNotEmpty = EnhancedPreconditions.checkArgument(couldBeEmpty, !couldBeEmpty.isEmpty());
//...
}
static class EnhancedPreconditions {
public static <T> T checkArgument(T reference, boolean expression) {
if (!expression) {
throw new IllegalArgumentException();
}
return reference;
}
}
我只是想知道这是设计使然,是否值得为此提出功能要求。
编辑:@Nizet,是的,检查方法可能很笨拙。但是在构造函数中检查空值看起来非常好,并且可以节省大量用于调试 NPE 的时间:
public class SomeClassWithDependency {
private final SomeDependency someDependency;
public SomeClassWithDependency(SomeDependency someDependency) {
this.someDependency = checkNotNull(someDependency);
}
//...
编辑:接受 Nizet 的回答,因为我同意他的副作用和一致性推理。此外,如果您查看 Xaerxess 评论,它看起来也会在其他开发人员中引起混淆。