JDK8中新增的Optional工具类基本使用

网友投稿 557 2023-01-12

JDK8中新增的Optional工具类基本使用

JDK8中新增的Optional工具类基本使用

Optional类的使用

JDK8以前,编写代码,通常会出现 NullPointerException (空指针异常),通常情况下我们都是通过 if ... else... 来对对象进行为空判断,然后再进行逻辑处理,代码写起来也比较冗余。

JDK8新增了Optional类,使用该类可以避免我们对空指针的检查,使代码看起来比较优雅。

最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下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 op1 = Optional.of("zhangsan");

//Optional op2 = Optional.of(null);

// 第二种方式通过 ofNullable方法 支持null

Optional op3 = Optional.ofNullable("lisi");

Optional op4 = Optional.ofNullable(null);

// 第三种方式 通过empty方法直接创建一个空的Optional对象

Optional op5 = Optional.empty();

}

4. Optional的常用方法

/**

* Optional中的常用方法介绍

* get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常

* get()通常和isPresent方法一块使用

* isPresent():判断是否包含值,包含值返回true,不包含值返回false

* orElse(T t):如果调用对象包含值,就返回该值,否则返回t

* orElseGet(SuplEYpQxXsQplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返回值

*/

@Test

public void test03(){

Optional op1 = Optional.of("zhangsan");

Optional 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 op1 = Optional.of("zhangsan");

Optional op2 = Optional.empty();

// 如果存在值 就做什么

op1.ifPresent(s-> System.out.println("有值:" +s));

op1.ifPresent(System.out::println);

}

/**

* 自定义一个方法,将Person对象中的 name 转换为大写 并返回

*/

@Test

public void test05(){

http:// Person p = new Person("zhangsan",18);

Optional op = Optional.of(p);

String name = getNameForOptional(op);

System.out.println("name="+name);

}

/**

* 根据Person对象 将name转换为大写并返回

* 通过Optional方式实现

* @param op

* @return

*/

public String getNameForOptional(Optional 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{

lEYpQxXsQreturn null;

}

}

~好了,Optional真的很简单,其实大家只要了解了它在工作中还是蛮有用的

以上就是JDK8中新增的Optional工具类基本使用的详细内容,更多关于JDK8 Optional工具类的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序生态进化分析(微信小程序产品分析)
下一篇:企业app开发趋势(企业app开发趋势)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~