1. 概述

在这个快速教程中,我们将学习几种检查给定 Integer 对象值是否为 null 或零的方法。为了简化,我们将使用单元测试断言来验证每种方法是否按预期工作。

接下来,让我们一起看看它们的实际应用。

2. 使用标准方式

使用逻辑或运算符可能是进行检查的第一个想法。它简单地检查给定的 Integer 数字是否为 null 或零。

让我们创建一个方法,以便更容易地进行验证:

public static boolean usingStandardWay(Integer num) {
    return num == null || num == 0;
}

这是执行检查的最直接方法。现在我们创建一个测试,看看它是否对不同的 Integer 对象有效:

int n0 = 0;
boolean result0 = usingStandardWay(n0);
assertTrue(result0);

boolean resultNull = usingStandardWay(null);
assertTrue(resultNull);

int n42 = 42;
boolean result42 = usingStandardWay(n42);
assertFalse(result42);

如我们所见,我们通过将三个 Integer 对象(零、null 和 42)传递给 usingStandardWay() 方法来测试它。在本教程中,我们将使用这三个 Integer 对象作为输入。

3. 使用三元运算符

我们经常使用三元运算符根据条件写变量赋值,例如:

variable = booleanExpression ? expression1 : expression2

接下来,让我们看看如何使用三元运算符进行所需的 Integer 检查:

public static boolean usingTernaryOperator(Integer num) {
    return 0 == (num == null ? 0 : num);
}

如上代码所示,(num == null ? 0 : num) 首先检查 num 变量是否为 null。如果是这样,我们就取零。否则,我们将保留原始的 num 值。

换句话说,这个表达式在这里执行了“将 null 转换为零”的操作。由于我们已经处理了 null 情况,我们只需要检查三元运算符表达式的结果是否为零。

接下来,让我们用我们的三个 Integer 对象测试这是否有效:

int n0 = 0;
boolean result0 = usingTernaryOperator(n0);
assertTrue(result0);

boolean resultNull = usingTernaryOperator(null);
assertTrue(resultNull);

int n42 = 42;
boolean result42 = usingTernaryOperator(n42);
assertFalse(result42);

测试运行后通过。所以,usingTernaryOperator() 方法按预期工作。

4. 使用 Optional

Java 8 引入了 [Optional](/java-optional) 类,因此如果我们的 Java 版本为 8 或更高版本,我们也可以使用 Optional 类的静态方法来实现此检查:

public static boolean usingOptional(Integer num) {
    return Optional.ofNullable(num).orElse(0) == 0;
}

由于我们不知道给定的 Integer 变量是否为 null,我们可以使用 Optional.ofNullable(num) 从它构建一个 Optional 实例。

接下来,我们调用 OptionalorElse() 方法。**orElse(x) 方法检查 Optional 对象:如果存在值,它返回值,否则返回 x**。因此,orElse(0) 也执行了“null 转换为零”。然后,剩下的就很简单了。我们只需要检查 orElse(0) 是否等于零。

接下来,让我们验证这种方法是否适用于我们的输入:

int n0 = 0;
boolean result0 = usingOptional(n0);
assertTrue(result0);

boolean resultNull = usingOptional(null);
assertTrue(resultNull);

int n42 = 42;
boolean result42 = usingOptional(n42);
assertFalse(result42);

如果运行测试,它也会通过。因此,usingOptional() 方法也能完成任务。

5. 使用 ObjectUtils

Apache Commons Lang 3 是一个非常受欢迎的库。如果我们正在工作的 Java 项目已经依赖于该库,我们也可以使用其 ObjectUtils 类进行 Integer 检查:

public static boolean usingObjectUtils(Integer num) {
    return ObjectUtils.defaultIfNull(num, 0) == 0;
}

如上述实现所示,我们在检查中调用了 ObjectUtils.defaultIfNull(num, 0) 方法。defaultIfNull() 方法是一个泛型方法。如果我们查看它的实现,我们可以理解 usingObjectUtils() 的实现:

public static <T> T defaultIfNull(final T object, final T defaultValue) {
    return object != null ? object : defaultValue;
}

如我们所见,如果不考虑泛型声明,defaultIfNull() 的实现就像使用三元运算符的表达式一样简单。这对我们来说并不陌生。因此,它也执行了“null 转换为零”的操作

像往常一样,让我们测试 usingObjectUtils() 方法:

int n0 = 0;
boolean result0 = usingObjectUtils(n0);
assertTrue(result0);

boolean resultNull = usingObjectUtils(null);
assertTrue(resultNull);

int n42 = 42;
boolean result42 = usingObjectUtils(n42);
assertFalse(result42);

不出所料,测试也通过了。

6. 总结

在这篇文章中,我们探讨了三种检查给定 Integer 对象是否为 null 或其值为零的方法。

如往常一样,本文中展示的所有代码片段都可以在GitHub上找到。


» 下一篇: Java Weekly, 第475期