两种可选方案的理想解决方案,如果存在一个,则另一个不能为空

时间:2019-03-14 10:35:24

标签: java optional

我正在寻找这段代码的更优雅的解决方案:

var first = Optional.ofNullable(a);
var second = Optional.ofNullable(b);
if ((unit.isPresent() && value.isEmpty()) || (value.isPresent() && 
     unit.isEmpty())) {
  throw new ExpWhatever();
}

条件是:

  • 如果两个可选参数均为null->好的,没有错误/错误。
  • 如果存在一个给定的可选选项,另一个也不能为空(否则:excpt。)

感谢任何想法或帮助。

2 个答案:

答案 0 :(得分:7)

isPresent()对于其中之一完全正确,这似乎是一个错误-因此XOR效果很好:

if (unit.isPresent() ^ value.isPresent()) {
    // Throw an exception
}

答案 1 :(得分:5)

如果您希望两个可选项都存在或为空(即它们具有相同的“空”状态),则可以使用以下方法:

if (unit.isPresent() != value.isPresent()) {
  //throw an exception
}