版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yan12422/article/details/84189127
Optional类是1.8之才有的,并且被广泛使用,主要功能是进行null的相关处理,在以前进行程序开发的过程中,如果为了防止程序中出现一些空指针的 异常,经常是使用if判断
以下是传统的模式,在引用接收的一方往往都是被动的进行判断,
public class JavaAPIDemo {
public static void main(String[] args) {
MessageUtil.useMessage(MessageUtil.getMessage());
}
}
class MessageUtil {
private MessageUtil() {
}
public static IMessage getMessage() {
return new MessageImpl();
}
public static void useMessage(IMessage msg) {
if (msg != null) { //防止空指针的异常
System.out.println(msg.getContent());
}
}
}
interface IMessage {
public String getContent();
}
class MessageImpl implements IMessage {
@Override
public String getContent() {
return "hello world";
}
}
所以为了解决这种被动的处理操作,在Java类中提供有一个Optional类,这个类可以实现null的处理操作
返回空数据 public static T Optional T empty();
获取数据 public T get();
保存数据,但是不允许出现null,出现了空就会抛出空指针异常 public static T Optional T of(T value);
保存数据,允许为null public static T Optional T ofNullable(T value);
空的时候,返回其他数据 public T orElse(T other);
import java.util.Optional;
public class JavaAPIDemo {
public static void main(String[] args) {
//如果你为空我用new MessageImpl()
MessageUtil.useMessage(MessageUtil.getMessage().orElse(new MessageImpl()));
}
}
class MessageUtil {
private MessageUtil() {
}
public static Optional<IMessage> getMessage() {
/**
* 在这里如果使用of就会报NullPointerException
*
* 使用ofNullable就会报java.util.NoSuchElementException: No value present
*
* 所以就要在上面使用orElse
*/
return Optional.ofNullable(null);
}
public static void useMessage(IMessage msg) {
if (msg != null) {
System.out.println(msg.getContent());
}
}
}
interface IMessage {
public String getContent();
}
class MessageImpl implements IMessage {
/**
* 返回空数据 public static T Optional T empty();
*
* 获取数据 public T get();
*
* 保存数据,但是不允许出现null,出现了空就会抛出空指针异常 public static T Optional T of(T value);
*
* 保存数据,允许为null public static T Optional T ofNullable(T value);
*
* 空的时候,返回其他数据 public T orElse(T other);
*/
@Override
public String getContent() {
return "hello world";
}
}
如果大家喜欢的可以关注我的微信公众号