Java基础工具--Guava Libraries学习笔记

jopen 10年前

什么是Guava-Libraries?

Guava-Libraries是google对java的一个扩展,主要涵盖集合、缓存、并发、I/O、反射等等。

它本来是Google内部所使用的一个类库,后来整理开源出来了。这套库的设计引入了很多新的理念,研究一下可能会使你对Java这门语言有新的认识和看法。

地址:http://code.google.com/p/guava-libraries/

这篇短文主要是关于Guava-Libraries基础工具,内容是我参考官方wiki和自己的使用体验结合而成。

null的使用

null在java中是一个很特殊的东西。它可以标识一个不确定的对象,比如

Ojbect o = null
</div> </td> </tr> </tbody> </table> </div> </div> </div>

同时在很多个集合中它代表key不存在,也可以代表值为null。

null使用需要给外的小心,稍不注意就会出现很多问题。当然更多的时候只是单纯的觉得null不够优雅而已。

Guava为我们提供了一个Optional的抽象类来解决这个问题。用类Present和Absent代表值存在和不存在。

以下是一个例子:

Optional possible = Optional.of( 5 );  if (possible.isPresent()) {      System.out.println(possible.get());  }     Optional absentValue = Optional. absent();  if (absentValue.isPresent())     System.out.println(absentValue.get());  System.out.println(absentValue.or(- 1 ));  System.out.println(absentValue.orNull());  System.out.println(absentValue.asSet());

</div> </div> </div>

第一种是值存在的,第二种是值不存在的。执行效果如下:

Java基础工具--Guava-Libraries学习笔记

这里说明一下isPresent()方法是判断是否有值的。or方法是非null返回Optional的值,否则返回传入值。

orNull()方法是非null返回Optional的值,否则返回null。

我个人觉得or方法比较常用就是了。

条件判断

Guava还封装了一些条件检查方法,比如判断真假、判断是否为空、判断index是否合法等等。如果判断通过,返回值本身,否则抛出错误。

每种方法又对应了三种重载:

1.没有错误信息

2.有直接的错误信息

3.带模板的错误信息

来个小例子:

int i = Preconditions.checkNotNull( null );  int i2 = Preconditions.checkNotNull( null , "错误" );  int i3 = Preconditions.checkNotNull( null , "错误:%s" , "001" );

</div> </div>

效果如下:

Java基础工具--Guava-Libraries学习笔记
Java基础工具--Guava-Libraries学习笔记
Java基础工具--Guava-Libraries学习笔记

对象的常用方法

简单实现了Object的一些方法而已,比如toString、hashCode。

我个人觉得equal这块用户不大,主要是toString和Compare。

特别是ComparisonChain的使用,有种链式编程的感觉。

例子:

System.out.println( "a equal a :" + Objects.equal( "a" , "a" ));  System.out.println( "a equal b :" + Objects.equal( "a" , "b" ));     System.out.println( "hascode : "           + Objects.hashCode( "one" , "two" , 3 , 4.0 ));     System.out.println( "Blog toString : "           + Objects.toStringHelper( "Blog" ).add( "name" , "huang" )                   .add( "url" , "http://htynkn.cnblogs.com/" ).toString());     System.out.println(ComparisonChain.start().compare( 1.0 , 1 )           .compare( "a" , "a" ).compare( 1.4411 , 1.441 ).result());

</div> </div>

效果:

Java基础工具--Guava-Libraries学习笔记

来自:http://www.cnblogs.com/htynkn/archive/2012/08/19/2646798.html