java优雅的处理空字符串

java优雅的处理空字符串

  可以说,在写代码的时候,判断对象是否为空,真的很讨厌啊,有没有?下面这个判空,还只是一层的,如果是好几层的,代码真的丑地不行。

 if(student!=null){
           student.setBrithCity(new BrithCity("Beijing"));
  }
一、Optional类

  有人会想到Optional类,于是上面代码变成这样子:

if(Optional.ofNullable(student).isPresent()){
           student.setBrithCity(new BrithCity("Beijing"));
   }

  这种做法,其实和上面没啥区别,真正优雅地做法,是下面这种:

private void show(Student student) {
        Optional.ofNullable(student).
                ifPresent((stu)-> stu.setBrithCity(new BrithCity("Beijing")));
    }

  顺带提一嘴,Optional类地orElse()与orElseGet()方法,处理null也不错,这两个方法,在前面的值为null,时都会返回括号里面的内容,但是不同的是,orElse()是传值,orElseGet()是传入一个操作过程,这个例子传入的是方法引用,当然lambda表达式也阔以。
  有一点要注意,orElse()方法,不管前面的值是不是null,都会执行括号里面方法,orElseGet()只会在前面为null值才会触发。

Optional.ofNullable(student).orElse(new Student());
Optional.ofNullable(student).orElseGet(Student::new);
二、Objects类

  Opentional的orElse(),orElseGet()方法,需要配合ofNullable()方法使用,Obejcts类也有类似的方法:requireNonNullElse(),requireNonNullElseGet(),
  注意,orElse()设置默认值时,可以为null,requireNonNullElse则不可以,打开源码可以看到内部对传入的默认值还调用了一个判空方法:requireNonNull()。下面是示例:

 String result = Objects.requireNonNullElse(a, "Hello world");
String result = Objects.requireNonNullElseGet(a, ()->new String("HelloWold"));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章