1. ホーム
  2. java

[解決済み] Javaで2つの引数をチェックし、両方がNULLでないか、または両方がNULLであるかをエレガントにチェックする。

2022-04-23 19:51:01

質問

Spring bootを使って、メールを送信するためのシェルプロジェクトを開発しました。

sendmail -from [email protected] -password  foobar -subject "hello world"  -to [email protected]

もし frompassword 引数がない場合は、デフォルトの送信者とパスワードを使っています。 [email protected]123456 .

そのため、もしユーザーが from を渡す必要があります。 password その逆も同様です。つまり、両方が非NULLであるか、両方がNULLであるかのどちらかである。

これをエレガントにチェックするにはどうしたらいいのでしょうか?

今、私のやり方は

if ((from != null && password == null) || (from == null && password != null)) {
    throw new RuntimeException("from and password either both exist or both not exist");
}

解決方法は?

を使用する方法があります。 ^ ( XOR ) 演算子です。

if (from == null ^ password == null) {
    // Use RuntimeException if you need to
    throw new IllegalArgumentException("message");
}

if の条件は、1つの変数だけがNULLの場合に真となる。

しかし、通常は、2つの if 条件と異なる例外メッセージ。1つの条件では、何が問題だったのかを定義することができないからです。

if ((from == null) && (password != null)) {
    throw new IllegalArgumentException("If from is null, password must be null");
}
if ((from != null) && (password == null)) {
    throw new IllegalArgumentException("If from is not null, password must not be null");
}

より読みやすく、より理解しやすくなり、入力も少し増えるだけです。