在Java 8中,您可以返回Optional
而不是null
。Java8文档说Optional是“一个可能包含也可能不包含非null值的容器对象。如果存在一个值,则isPresent()将返回true,而get()将返回该值。”
实际上,这为什么有用?另外,在任何情况下,使用null
都是首选?性能如何?
实际上,这为什么有用?
例如,假设您有以下整数流,并且正在执行过滤:
int x = IntStream.of(1, -3, 5)
.filter(x -> x % 2 == 0)
.findFirst(); //hypothetical assuming that there's no Optional in the API
您事先并不知道过滤操作会删除Stream中的所有值。
假设API中没有可选的。在这种情况下,应该findFirst
返回什么?
唯一可能的方法是抛出一个异常,例如NoSuchElementException
,这是IMO相当烦人的,因为我不认为它应该停止程序的执行(或者您必须捕获该异常,也不是很方便),并且过滤条件可能比这更复杂。
使用时Optional
,由调用方检查a是否Optional
为空(即,您的计算是否得出值)。
使用引用类型,您还可以返回null
(但null
在仅过滤null
值的情况下可能是一个可能的值;因此我们回到异常情况)。
关于非流用法,除了防止NPE外,我认为这还有助于设计一个更明确的API,说明可能存在或不存在该值。例如,考虑此类:
class Car {
RadioCar radioCar; //may be null or not
public Optional<RadioCar> getRadioCar() {
return Optional.ofNullable(radioCar);
}
}
在这里,您显然是在向呼叫者说,汽车中的收音机是可选的,它可能在或不在那里。
在Java8中,可以返回而不是。Java8文档说,可选的是“一个容器对象,它可以包含非空值,也可以不包含非空值。如果存在一个值,isPresent()将返回true,而get()将返回该值。” 在实践中,这为什么有用呢?另外,有没有使用作为首选项的情况?那表演呢?
我知道Optionals ifPresent()调用的目的是替换空检查。从Oracle文档中提取代码示例,它在简单情况下似乎非常有用。例如: 我只是想了解为什么这被认为比空检查更好。可读性?表演在我看来,这会对项目性能造成影响,因为必须引入一个新的对象才能容纳我们最终希望获得的对象?总之,为什么这是 如果(声卡!=null),则认为比这更好。
当我从DB中检索学生实体时,存储库返回一个可为null的
主要内容:1 Java8 Optional类的介绍,2 Java8 Optional类的方法,3 Java8 Optional类案例:不使用Optional类,4 Java8 Optional类案例1:如果不存在值,5 Java8 Optional类案例2:如果存在值,6 Java8 Optional类案例31 Java8 Optional类的介绍 Java在Jdk 8中引入了新的Optional类。它是一个公共的final类,用于处理Java应用程序中的NullPointerException
可选是用于包含非null对象的不可变对象。 可选对象用于表示缺少值的null。 此类具有各种实用程序方法,以便于代码处理可用或不可用的值,而不是检查空值。 Class 声明 (Class Declaration) 以下是com.google.common.base.Optional《T》类的声明 - @GwtCompatible(serializable = true) public abstra
Optional是用于包含非null对象的容器对象。 可选对象用于表示缺少值的null。 此类具有各种实用程序方法,以便于代码将值处理为“可用”或“不可用”,而不是检查空值。 它在Java 8中引入,类似于Guava中的Optional。 Class 声明 (Class Declaration) 以下是java.util.Optional《T》类的声明 - public final class O