Optional类
Optionnal类主要功能是进行null的相关处理,
package 开发支持类库;
interface IMessage{
public String getContent();
}
class MessageImpl implements IMessage{
@Override
public String getContent() { //覆写接口方法
return "www.baidu.com";
}
}
class MessageUtil{
public static IMessage getMessage() {
return new MessageImpl(); //返回一个实例化对象
}
public static void useMessage(IMessage msg) {
if(msg != null) {
System.out.println(msg.getContent()); //有可能因为出现null,而导致空指向
}
}
}
public class Optional类 {
public static void main(String[] args) {
MessageUtil.useMessage(MessageUtil.getMessage());
}
}
www.baidu.com
在引用接收的一方往往都是被动的进行判断。所以为了解决这种被动的处理操作,在Java类照片给你提供有一个OPtionnal类,这个类可以实现null的处理操作。 在这个类里面提供有如下的操作方法:
- 返回空的数据:public static<T>Optional<T>empty();
- 获取数据:public T get();
- 保存数据,但是不允许出现null:public static <T>Optional<T>of(T value);
如果在保存数据的时候存在null,则会抛出NullPointException异常。
- 保存数据,允许为空:public static <T> Optional<T>ofNullable(T value);
- 空的时候返回其他数据:public T orElse(T other);
范例:修改程序,按照正规的程序完成
package 开发支持类库;
import java.util.Optional;
interface IMessage{
public String getContent();
}
class MessageImpl implements IMessage{
@Override
public String getContent() { //覆写接口方法
return "www.baidu.com";
}
}
class MessageUtil{
public static Optional<IMessage> getMessage() { //返回一个Optional对象
return Optional.of(null); //空值
}
public static void useMessage(IMessage msg) {
if(msg != null) {
System.out.println(msg.getContent()); //有可能因为出现null,而导致空指向
}
}
}
public class Optionnal类 {
public static void main(String[] args) {
IMessage temp = MessageUtil.getMessage().get(); //获取数据
MessageUtil.useMessage(temp);
}
}
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:208)
at java.base/java.util.Optional.of(Optional.java:111)
at 开发支持类库.MessageUtil.getMessage(Optionnal类.java:18)
at 开发支持类库.Optionnal类.main(Optionnal类.java:29)
此时Optional.of()的内容为null,运行就会出错并且明确告诉你次方法在哪个位置,空指针异常。
由于Optional类中允许保存有null的内容,所以在数据获取的时候也可以进行null的处理。如果使用get()方法在执行时就会出现 “Exception in thread "main" java.lang.NullPointerException”异常,所以此时可以更换为orElse(T other);
范例:使用orElse(T other)解决null值
package 开发支持类库;
import java.util.Optional;
interface IMessage{
public String getContent();
}
class MessageImpl implements IMessage{
@Override
public String getContent() { //覆写接口方法
return "www.baidu.com";
}
}
class MessageUtil{
public static Optional<IMessage> getMessage() { //返回一个Optional对象
return Optional.ofNullable(null); //有对象
}
public static void useMessage(IMessage msg) {
if(msg != null) {
System.out.println(msg.getContent()); //有可能因为出现null,而导致空指向
}
}
}
public class Optionnal类 {
public static void main(String[] args) {
IMessage temp = MessageUtil.getMessage().orElse(new MessageImpl()); //如果数据为null,则返回一个Message对象
MessageUtil.useMessage(temp);
}
}
www.baidu.com
在所有引用数据类型的操作处理之中,null是一个重要的技术问题,所以JDK1.8提供的Optional类对于null的处理很有帮助,同时也是日后进行项目开发之中使用很多的程序类。