使用Objects.java的方法有什么好处吗?

时间:2018-04-02 20:21:19

标签: java

我检查了Objects.java的方法,但我找不到那些方法太多有用的方面。例如,当我使用Objects.isNull:

时将使用的代码
public static boolean isNull(Object obj) {
    return obj == null;
}

有两种方法可以检查两个对象的无效性:

if(o == null)
if(Objects.isNull(o))

因此他们之间并没有那么多差异。我将使用Objects.toString

的代码的另一个例子
public static String toString(Object o) {
    return String.valueOf(o);
}

当我使用它时它在后台调用toString of object。(只有一个区别,它写入“null”,如果该对象为null,因为它使用String.valueOf()

和Objects.equals:

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

它将在每次检查中进行空检查(不知道是否有必要。)

我错了吗?如果我是,我为什么要使用 Objects.java的方法和其他方法

修改

我没有仅针对Objects.isNull和Objects.nonNull问这个问题,我想知道目的,可用性(除了lambdas)以及Objects类及其方法的好处。但是在javadoc中写道,只有Objects.isNull和Objects.nonNull才有意与lambdas一起使用(作为谓词过滤器(Objects :: isNull))。我也想知道其他人

3 个答案:

答案 0 :(得分:11)

为了在lambda表达式中使用,存在

Objects.isNull()和更有用的Objects.nonNull()Objects.toString()是为了安全性而引入的(正如@davidxxx所指出的那样),但在lambdas中也非常有用。

例如,list.stream().filter(Objects::nonNull).map(Objects::toString)会为Stream<String>提供toString()调用listObjects.equals()中非空的所有元素的结果。

{{1}}非常有用,当您知道您要比较的对象可能为空时,因为它可以节省您的输入。

答案 1 :(得分:3)

您似乎要问3个单独的问题,因此我将分别解决这些问题:

  1. isNull()及其随附nonNull()已添加到Java 8中以用作方法参考,类似于Integer.sum()Boolean.logicalOr()。例如:

    // Print only non-null elements
    list.stream()
        .filter(Objects::nonNull)
        .forEach(System.out::println);
    
  2. 我没有看到Objects.toString()超过String.valueOf()的任何优势。也许它包含在与其他零安全助手的一致性中。

  3. 如果您知道对象非空,请继续使用Object.equals()。如果Objects.equals()可能都为空,则使用checkValue

答案 2 :(得分:1)

在某些情况下,这些方法中的某些方法并不能带来很好的效果。价值,你可以适当地忽略它们。

1)但是当你操纵错过某些检查的课程时(检查NullPointerException以防止equals())或&#34;优化&#34; (例如,检查Objects中的第一个引用相等),使用这些String.valueOf(o); if(o == null){...} a.equals(b); 方法不会受到这些因素的影响,所以 保持客户端代码的健壮性,而无需直接编写所有这些检查。

2)另一个有趣的用途是使用lambda body,因为你想使用方法引用

3)最后,它允许以均匀的方式执行这些非常常见的处理。

这3个处理依赖于3种不同的方式:

Objects

虽然这些依赖于单一方式:Objects.toString(o); if(Objects.isNull(o)){...} if(Objects.equals(a, b)){...} 中定义的实用方法。

import java.util.Scanner;

public class BinaryToDec {
    public static void main(String []args ) {
            String binary;
            int dec;

            Scanner scan = new Scanner(System.in);
            System.out.print("Enter a binary number: ");
            binary = scan.nextLine();


            dec = Integer.parseInt(binary,2);
                System.out.printf("The corresponding decimal value is: %d\n",dec);

                System.out.println("Invalid binary number entered!");

    }
}