Guava自学习笔记一

时间:2021-10-02 16:17:27
 偶然的机会接触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);
}
}