##Optional类
Java8 新增了非常多的特性,这里主要研究下Optional类,做个记录
Optional 是个可以包含null值的容器对象,如果值存在,isPresent()
方法返回true并且使用get()
获取值,类的具体定义可以看源码
主要用的的类方法:
static <T> Optional<T> of(T value)
返回一个Optional对象,value不能为nullpublic static <T> Optional<T> ofNullable(T value)
如果value未null,返回一个空的Optional对象public boolean isPresent()
如果有值,返回true,否则falsepublic T get()
如果有值,返回值,没有则出错,一般跟isPresent()
同时使用public T orElse(T other)
如果有值则返回值,否则返回other值
这篇文章拿来解决的问题:
如果一个方法带缓存,并且其结果有可能是null值,而且是合理的,需要缓存下来,这时候可以使用Optional对象
示例,返回Optional对象的方法
package com.example.demo.service;
import org.springframework.stereotype.Service;
import java.util.Optional;
/**
* Optional 示例.
*/
@Service
public class MyService {
public Optional<String> getString(String str){
String str1 = null;
if(str.equals("Haha")){
str1 = "Haha";
}
Optional<String> ret = Optional.ofNullable(str1);
return ret;
}
}
测试用例
package com.example.demo.service;
import com.example.demo.BaseTest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Optional;
import static org.junit.Assert.*;
/**
* .
*/
public class MyServiceTest extends BaseTest {
@Autowired
private MyService myService;
@Test
public void getString() throws Exception {
Optional<String> ret = myService.getString("ssss");
if(ret.isPresent()) {
//此处如果不判断直接打印 则抛异常
System.out.println(ret.get());
}
// 也可以不判断 使用orElse,会有默认值
System.out.println(ret.orElse("VALUE IS NULL"));
}
}