(开发支持类库)Optional类

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的处理很有帮助,同时也是日后进行项目开发之中使用很多的程序类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值