我检查了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))。我也想知道其他人。
答案 0 :(得分:11)
Objects.isNull()
和更有用的Objects.nonNull()
。 Objects.toString()
是为了安全性而引入的(正如@davidxxx所指出的那样),但在lambdas中也非常有用。
例如,list.stream().filter(Objects::nonNull).map(Objects::toString)
会为Stream<String>
提供toString()
调用list
中Objects.equals()
中非空的所有元素的结果。
{{1}}非常有用,当您知道您要比较的对象可能为空时,因为它可以节省您的输入。
答案 1 :(得分:3)
您似乎要问3个单独的问题,因此我将分别解决这些问题:
isNull()
及其随附nonNull()
已添加到Java 8中以用作方法参考,类似于Integer.sum()
和Boolean.logicalOr()
。例如:
// Print only non-null elements
list.stream()
.filter(Objects::nonNull)
.forEach(System.out::println);
我没有看到Objects.toString()
超过String.valueOf()
的任何优势。也许它包含在与其他零安全助手的一致性中。
如果您知道对象非空,请继续使用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!");
}
}