Guava学习教程

第一篇:Optional的使用

java中最容易出现的错误,莫过于NullPointException,23种设计模式,还专门为此提出了空对象设计模式

我们看如下两种风格:

//A
    public void sayHelloA(String name) {
        if (name == null) {
            System.out.println("name = " + "无名氏");
        }
        System.out.println("name = " + name);
    }

//B
    public void sayHelloB(String name) {
        name = Optional.fromNullable(name).or("无名氏");
        System.out.println("name = " + name);
    }

可以看出B写的代码,至少有两种优点

1、代码更优雅,一般情况下可以替代空对象设计模式(用isPresent()的时候比!=null更加语义化)。
2、提醒人们对于null的判断,这点很重要,很多错误都是这里引起的。

下面列举了一下常用的方法:

Optional<T>.of(T) 为Optional赋值,当T为Null直接抛NullPointException,建议这个方法在调用的时候直接传常量,不要传变量
Optional<T>.fromNullable(T) 为Optional赋值,当T为Null则使用默认值。建议与or方法一起用,风骚无比
Optional<T>.absent() 为Optional赋值,采用默认值
T or(T) 返回optional的值,当Optional的值为null时,使用or赋予的值返回。与fromNullable是一对好基友
T get() 当Optional的值为null时,抛出IllegalStateException,返回Optional的值
boolean isPresent() 如果Optional存在值,则返回True
T orNull() 当Optional的值为null时,则返回Null。否则返回Optional的值
Set<T> asSet() 将Optional中的值转为一个Set返回,当然只有一个值啦,或者为空,当值为null时。

下面给出一些代码示例:

import com.google.common.base.Optional;

public class GuavaTester {
   public static void main(String args[]){
      GuavaTester guavaTester = new GuavaTester();

      Integer value1 =  null;
      Integer value2 =  new Integer(10);
      //Optional.fromNullable - allows passed parameter to be null.
      Optional<Integer> a = Optional.fromNullable(value1);
      //Optional.of - throws NullPointerException if passed parameter is null
      Optional<Integer> b = Optional.of(value2);        

      System.out.println(guavaTester.sum(a,b));
   }

   public Integer sum(Optional<Integer> a, Optional<Integer> b){
      //Optional.isPresent - checks the value is present or not
      System.out.println("First parameter is present: " + a.isPresent());

      System.out.println("Second parameter is present: " + b.isPresent());

      //Optional.or - returns the value if present otherwise returns
      //the default value passed.
      Integer value1 = a.or(new Integer(0));    

      //Optional.get - gets the value, value should be present
      Integer value2 = b.get();

      return value1 + value2;
   }    
}

参考资料:
极客学院:http://wiki.jikexueyuan.com/project/google-guava-official-tutorial/use-and-ignore-null.html
Guava Optional 的应用 https://my.oschina.net/readjava/blog/309265

易百教程 http://www.yiibai.com/guava/guava_optional_class.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容