检查Java中的两个参数,既不为空,也不是两个为空

问题:

我用spring boot开发一个用于发送邮件的shell程序,例如

sendmail -from foo@bar.com -password  foobar -subject "hello world"  -to aaa@bbb.com

如果frompassword参数丢失,我使用默认发件人和密码,例如noreply@bar.com123456
所以如果用户通过from参数,它们也必须通过password参数,反之亦然。也就是说,两者都是非空的,或者两者都是空的。
如何检查这个优雅?
现在我的方式是

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条件将为真。
但是我觉得通常情况下使用两个if不同异常消息的条件是最好的。您无法使用单一条件定义出错问题。

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");
}

它更可读,更容易理解,只需要一点额外的打字。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Check two arguments in Java, either both not null or both null elegantly

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

6 + 4 =