私は、guavaライブラリがnullをチェックするための単純なワンライナーをどのように許可するかを本当に気に入っています。
public void methodWithNullCheck(String couldBeNull) {
String definitelyNotNull = checkNotNull(couldBeNull);
//...
}
悲しいことに、単純な引数チェックには、少なくとも2行のコードが必要です。
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、ええ、メソッドのチェックインは不器用かもしれません。ただし、コンストラクターでnullをチェックすることは非常に見栄えがよく、NPEのデバッグに費やす時間を大幅に節約できます。
public class SomeClassWithDependency {
private final SomeDependency someDependency;
public SomeClassWithDependency(SomeDependency someDependency) {
this.someDependency = checkNotNull(someDependency);
}
//...
編集:私は副作用と一貫性の推論について彼に同意するので、ニゼットの答えを受け入れます。また、Xaerxessのコメントを見ると、他の開発者の間でも混乱を引き起こしているように見えます。