网站首页 > 博客文章 正文
??最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Optional
Optional
这个Optional类注意是解决空指针的问题
1. 以前对null 的处理
@Test
public void test01(){
//String userName = "张三";
String userName = null;
if(userName != null){
System.out.println("字符串的长度:" + userName.length());
}else{
System.out.println("字符串为空");
}
}
2. Optional类
Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避免Null检查,防止NullpointerException,
在这里插入图片描述
3. Optional的基本使用
Optional对象的创建方式
/**
* Optional对象的创建方式
*/
@Test
public void test02(){
// 第一种方式 通过of方法 of方法是不支持null的
Optional<String> op1 = Optional.of("zhangsan");
//Optional<Object> op2 = Optional.of(null);
// 第二种方式通过 ofNullable方法 支持null
Optional<String> op3 = Optional.ofNullable("lisi");
Optional<Object> op4 = Optional.ofNullable(null);
// 第三种方式 通过empty方法直接创建一个空的Optional对象
Optional<Object> op5 = Optional.empty();
}
4. Optional的常用方法
/**
* Optional中的常用方法介绍
* get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常
* get()通常和isPresent方法一块使用
* isPresent():判断是否包含值,包含值返回true,不包含值返回false
* orElse(T t):如果调用对象包含值,就返回该值,否则返回t
* orElseGet(Supplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返回值
*/
@Test
public void test03(){
Optional<String> op1 = Optional.of("zhangsan");
Optional<String> op2 = Optional.empty();
// 获取Optional中的值
if(op1.isPresent()){
String s1 = op1.get();
System.out.println("用户名称:" +s1);
}
if(op2.isPresent()){
System.out.println(op2.get());
}else{
System.out.println("op2是一个空Optional对象");
}
String s3 = op1.orElse("李四");
System.out.println(s3);
String s4 = op2.orElse("王五");
System.out.println(s4);
String s5 = op2.orElseGet(()->{
return "Hello";
});
System.out.println(s5);
}
@Test
public void test04(){
Optional<String> op1 = Optional.of("zhangsan");
Optional<String> op2 = Optional.empty();
// 如果存在值 就做什么
op1.ifPresent(s-> System.out.println("有值:" +s));
op1.ifPresent(System.out::println);
}
/**
* 自定义一个方法,将Person对象中的 name 转换为大写 并返回
*/
@Test
public void test05(){
Person p = new Person("zhangsan",18);
Optional<Person> op = Optional.of(p);
String name = getNameForOptional(op);
System.out.println("name="+name);
}
/**
* 根据Person对象 将name转换为大写并返回
* 通过Optional方式实现
* @param op
* @return
*/
public String getNameForOptional(Optional<Person> op){
if(op.isPresent()){
String msg = //op.map(p -> p.getName())
op.map(Person::getName)
//.map(p -> p.toUpperCase())
.map(String::toUpperCase)
.orElse("空值");
return msg;
}
return null;
}
/**
* 根据Person对象 将name转换为大写并返回
* @param person
* @return
*/
public String getName(Person person){
if(person != null){
String name = person.getName();
if(name != null){
return name.toUpperCase();
}else{
return null;
}
}else{
return null;
}
}
~好了,Optional真的很简单,其实大家只要了解了它在工作中还是蛮有用的哦,欢迎点赞关注加收藏哦
猜你喜欢
- 2024-11-03 Java Lambda从入门到精通之二十二Optional类
- 2024-11-03 java8,你应该了解的新特性(空指针终结者:Optional 类)
- 2024-11-03 Java Optional使用指南(java.util.optional)
- 2024-11-03 Java 8 Optional 最佳指南(java中optional)
- 2024-11-03 「Java8实战」使用Optional取代null
- 2024-11-03 Java Optional类的使用(java options类)
- 2024-11-03 Java8新特性:Optional 类(java options类)
- 2024-11-03 惊了,JDK都到23了,据说还有99%Java程序员都不会用optional?
- 2024-11-03 还在用if(obj!=null)做非空判断?带你快速上手Optional实战
- 2024-11-03 Java8新特性之空指针异常的克星Optional类
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)