你的位置:首页 > Java教程

[Java教程]Guava自学习笔记一


 偶然的机会接触guava,对于我这种小白来说,google的东西当然是高大上的了,所以抱着学(装)习(逼)的心态,在网上向前辈们学习了下。当然,我学guava主要也就几个目的,首先当然是想着能否把guava应用在自己平日的代码里,如果guava的引用能使代码的书写更加简洁优雅,更着提升程序的性能,减少难以预测的错误,当然是极好的。当然,俺们的目的肯定不限于此,当能很好的应用于项目了,忘了说了,guava应该就是一个工具类集合了,里面对很多我们平常用的对象,方法进行了简单的封装,而使得通过调用guava里扩展的方法比调用java原生的方法要更优雅而严谨,从这方面来说这个封装应该不会太简单。鉴于此,guava学习的终极目标应该是通过源码的分析来学习它牛逼的思想了。(写到此,已经一头雾水)
        张三跟李四说让他去找王五的媳妇过来,先不管找隔壁老王媳妇的目的是什么,如果隔壁老王搬走了,当然应该是东窗事发,赶夜路走的,那这个时候老王都找不到了,又怎么找他媳妇呢。这要在程序里也好理解,就空指针异常嘛。也没多大的事,但你这样莫名其妙的空指针不是不优雅,你说没办法,老王不在家。好吧,现在给每户人家配个职岗管家,你就去问管家,人在不在管家一概都知道,这样他就不会莫名其妙的吐你一口空指针了。那guava就有这样的管家免费到货。
        这个管家是谁呢,对,就是Optional 。
        Optional给null分配了个管家,现在你想要个空对象,只要 
        Optional<Integer> NullableOpt=Optional.fromNullable(null);
        下就好了,这样NullableOpt这个对象就管着一个原本空指针的对象了,现在这样NullableOpt.isPresent()调用这个方法返回的是这个对象是否是空的判断,返回boolean,不为空就是true.当然你大概不会存个null进去。一般的你会有一个变量 比如a,然后你
        Optional<Integer> aOpt=Optional.fromNullable(a);
        这样你就可以这样if(aOpt.isPresent()){}判断是否为空了,如果不为空的话那怎样取得这个管家管理的那个对象的值呢。get对。
        possible.get()就像这样,便能取的所管辖的具体值了。这些你可能不会了,这个值都还没存进去呢,当然,之前这个值是应该要存进去的,那也是很方便的。有两种方法存具体值

         Optional<Integer> possible=Optional.of(6);直接存值,如果存了null,运行时报空指针
         Optional<Integer> NoNullableOpt=Optional.fromNullable(10);另外这是第二种方法,你会发现这个fromNullable既可以存null,也可以存具体对象,so就是这么酷炫。当然如果你的确要取一个空,Optional也有一个专职方法任你调戏
        Optional.absent()返回的对象,的isPresent()的方法比如false,也就是管家明确的告诉你老王没了。跑了。。

        在悄悄的告诉你两个方法
        例如
        Optional<Integer> NullableOpt=Optional.fromNullable(null);这个
        你可以通过asSet方法
        Set<Integer> set=NullableOpt.asSet();得到一个Set,当然这个Set的size()为1
        另外,现在你有个这的毛病,你要看看里面那个值是不是你本来的那个值,像这样
        Optional<Integer> bOpt=Optional.fromNullable(12);你放了个12,然后你忘了,你说你咋会忘
        好,忘了没事,咱死马当活马,bOpt.or(8)这样要是果真是现在的8,就给你返回原本存进去的那个8,这明显不是啊,没关系,死马当活马么,就拿你传进来的这个8充充数,你知我知,就好了。呵呵。。
        开始我们要得到这个存在里面的值是不是得先isPresent()判断下,这样是不是不爽,没事,还有一招
        bOpen.orNull();高手都是不变应万变的,这样要是存的是null就返回null要是是某个具体对象或值什么的,就原本那个给他了
        今天班会,开到这里,散会。滚蛋儿~~
        等等,留个小代码~~
  
package com.test;import java.util.Set;import org.junit.Test;import com.google.common.base.Optional;public class OptionalTest {    @Test  public void testOptional() throws Exception {     Optional<Integer> possible=Optional.of(6);    Optional<Integer> absentOpt=Optional.absent();    Optional<Integer> NullableOpt=Optional.fromNullable(null);    Optional<Integer> NoNullableOpt=Optional.fromNullable(10);    if(possible.isPresent()){      System.out.println("possible isPresent:"+possible.isPresent());      System.out.println("possible value:"+possible.get());    }    if(absentOpt.isPresent()){      System.out.println("absentOpt isPresent:"+absentOpt.isPresent()); ;    }        System.out.println("fromNullableOpt isPresent:"+NullableOpt.isPresent()); ;    if(NoNullableOpt.isPresent()){      System.out.println("NoNullableOpt isPresent:"+NoNullableOpt.isPresent()); ;    }  }    @Test  public void testMethodReturn() {    Optional<Long> value = method();    if(value.isPresent()==true){      System.out.println("获得返回值: " + value.get());       }else{              System.out.println("获得返回值: " + value.or(-12L));      }        System.out.println("获得返回值 orNull: " + value.orNull());        Optional<Long> valueNoNull = methodNoNull();    if(valueNoNull.isPresent()==true){      Set<Long> set=valueNoNull.asSet();      System.out.println("获得返回值 set 的 size : " + set.size());        System.out.println("获得返回值: " + valueNoNull.get());       }else{      System.out.println("获得返回值: " + valueNoNull.or(-12L));      }        System.out.println("获得返回值 orNull: " + valueNoNull.orNull());  }  private Optional<Long> method() {    return Optional.fromNullable(null);  }  private Optional<Long> methodNoNull() {    return Optional.fromNullable(15L);  }}