Guava自学习笔记一

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
    }
}

 

  

以上是关于Guava自学习笔记一的主要内容,如果未能解决你的问题,请参考以下文章

Guava学习笔记概览

Guava学习笔记:Google Guava 类库简介

译丨Yarn - Javascript 新一代套件管理

guava 学习笔记 瓜娃(guava)的API快速熟悉使用

Guava学习笔记:EventBus(转)

Guava学习笔记:Optional优雅的使用null