首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Java中的两个参数,要么都不为null,要么都为null

检查Java中的两个参数,要么都不为null,要么都为null
EN

Stack Overflow用户
提问于 2016-01-04 14:57:24
回答 11查看 37.4K关注 0票数 169

我使用spring boot开发了一个用来发送电子邮件的shell项目。

代码语言:javascript
复制
sendmail -from foo@bar.com -password  foobar -subject "hello world"  -to aaa@bbb.com

如果缺少frompassword参数,我将使用默认发件人和密码,例如noreply@bar.com123456

因此,如果用户传递from参数,他们也必须传递password参数,反之亦然。也就是说,要么两者都为非空,要么两者都为空。

我如何优雅地检查这一点?

现在我的方式是

代码语言:javascript
复制
if ((from != null && password == null) || (from == null && password != null)) {
    throw new RuntimeException("from and password either both exist or both not exist");
}
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2016-01-04 15:08:13

有一种使用^ (XOR)运算符的方法:

代码语言:javascript
复制
if (from == null ^ password == null) {
    // Use RuntimeException if you need to
    throw new IllegalArgumentException("message");
}

如果只有一个变量为空,则if条件将为真。

但我认为通常使用两个if条件和不同的异常消息会更好。你不能用一个条件来定义哪里出了问题。

代码语言:javascript
复制
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");
}

它更具可读性,也更容易理解,而且只需要额外输入一点内容。

票数 337
EN

Stack Overflow用户

发布于 2016-01-04 14:59:53

好的,听起来你是想检查这两个变量的“Well”条件是否相同。您可以使用:

代码语言:javascript
复制
if ((from == null) != (password == null))
{
    ...
}

或者使用helper变量使其更明确:

代码语言:javascript
复制
boolean gotFrom = from != null;
boolean gotPassword = password != null;
if (gotFrom != gotPassword)
{
    ...
}
票数 290
EN

Stack Overflow用户

发布于 2016-01-04 19:36:51

就我个人而言,我更喜欢可读性而不是优雅。

代码语言:javascript
复制
if (from != null && password == null) {
    throw new RuntimeException("-from given without -password");
}
if (from == null && password != null) {
    throw new RuntimeException("-password given without -from");
}
票数 222
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34586109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档