Google Guava入门(一)
Guava作为Java编程的助手,可以提升开发效率,对Guava设计思想的学习则极大的有益于今后的编程之路。故在此对《Getting Started with Google Guava》一书进行翻译并实战,未予审校,错误之处请大家不吝赐教。
全文目录如下:
Google Guava入门
前言
目前,在软件行业内,Java仍然是最主要的开发语言之一,受欢迎程度依然保持着。Java的一个优势是其开发人员可以获取丰富的第三方库,帮助开发人员更加高效的编码。Guava就是一个很棒的库,在开发活动中给予开发者极大的提升。此外,随着我们开始使用Guava,我们将获得很多灵感,用于自己代码的实现。
本书覆盖的内容
第一章,介绍Guava,此外给出使用Guava的例子;
第二章,基本的Guava工具,包括使用字符串和对象的基本功能;
第三章,Guava函数式变成,介绍Guava提供的函数式编程特性;
第四章,使用集合,包括增强现有Java集合功能的工具和类;
第五章,并发,展示了如何通过使用Guava的并发抽象化帮助我们更好的编写并发代码;
第六章,Guava缓存,介绍Guava缓存,包括一个自加载缓存;
第七章,EventBus类,通过它完成基于事件的编程;
第八章,使用文件类,展示了Guava如何极大地简化文件的读写;
第九章,零碎工作覆盖了规避null的Optional类,哈希函数,BloomFilter数据结构。
入门
本章涵盖了一些Guava的历史,然后我们会写一个例子,说明为什么你需要一个成熟的库而不是从头开始自己写。我们会说明在哪可以获得Guava库,如何安装,最好,如何启动本书所带的源码。
Guava简介
什么是Guava?Google Guava源于2007年的"Google Collections Library",提供使用Java集合的工具,已经进化为Java开发者的基础工具箱。Guava拥有对很多人有用的一些东西。如与字符串、集合、并发、I/O和反射的协作的类。Function接口提供了Java函数式编程的能力,并且极大地简化了代码。Suppier接口帮助creational pattern(23种设计模式之一)。但是,Guava不仅仅是从Java中提取的一些样板的抽象化,或者一些我们都认为在Java中自带的便利方法。Guava涉及编写良好的代码,促使代码更有弹性、更加简洁。所有建议不仅仅是使用Guava,更要读一下它的源码,学习运行的原理。然后将同样的准则用于自己所写的代码之中。最后,祝大家学的愉快!
Guava使用实例
作为软件开发者,我们认为可以做所有的事情。我们本能地希望写属于自己的库,这些库用于处理我们日常的事务。当然,我们认为自己写的代码是刀枪不入的,并且我们了解为何写单元测试,并且能够通过。这里,我有些不好的消息告诉大家,我们并没有自己想象的那么优秀。实际上呢,这与聪明程度无关,更多的是我们所写的代码不是不仅仅需要通过单元测试,还要被很多开发者所使用并在代码中将他们的需求衡量进来。Guava被用于数以百计的生产环境应用,截止2012年7月,在guava-tests包里有惊人的28600个独立单元测试。归根结底其实使用像Guava这样的库远远好于自己写。此外,据Larry Wall(Perl的作者)所言,软件工程师最好的品质之一就是"懒惰",不是不想工作的意思,而是在可以良好运行的情况下不去重新改造车轮。真正优秀的程序员在开始自己写程序时会寻找已有的库来解决遇到的问题。
本书是关于什么的?
本书的目标是当你coding时总是会将它放在"手"边。当遇到需要使用Guava中的内容解决的状况或者Guava可能拥有解决你遇到的问题的方法时,我们期望本书能够给你答案。如果美誉哦,最少能够指引你到对的方向上。本书涵盖的所有话题都有源码。多数时候,源码是单元测试的形式。有时提出的一些有意义的例子可能是不同的形式,单元测试可以快速地展示代码工作的原理。并且随着Guava发布计划趋于频繁,单元测试是无价的,如果内容与之前的版本相比有变化,运行这些测试给你快速的指示。然而覆盖所有Guava库所有的部分几乎不可能,我们尽可能使本书全面并且覆盖典型的程序员认为有用的内容。最后我们希望本书易于阅读、提供乐趣、实用性强。
Guava安装
开始使用Guava之前,需要安装Java 1.6或更高的版本。本书使用的Guava是版本14,是撰写时最新的版本。下面是开始Guava的执行步骤:
- Guava在https://code.google.com/p/guava-libraries/ 上可以下载到guava-14.jar。
- 如果使用GWT(Google Web Toolkit,Java编写AJAX前端)并且希望在代码中应用Guava,可以下载GWT兼容版本guava-gwt-14.jar。因为标准版本不会通过GWT编译器编译成JavaScript。
- JAR文件下载之后,作为第三方库添加进IDE(IntelliJ, NetBeans, Eclipse)。如果使用的是文本编辑器(Sublime Text2或者TextMate),添加JAR文件路径进classpath。
- API文档位于http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/index.html。
现在准备工作就做好了,可以开始使用Guava了。
通过Maven或者Gradle管理Guava
可以使用Maven或者Gradle这样的构建工具来使用Guava。
在Maven项目中使用Guava,在pom.xml中添加如下的依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0</version>
</dependency>
如果使用的是Gradle,首先添加Maven中心仓库(如果还没有添加的话),即在build.gradle文件中添加如下内容:
repositories {
mavenCentral()
}
然后,在build.gradle文件添加以下的依赖节点:
dependencies {
compile group: 'com.google.guava' name: 'guava' version: '14.0'
}
获取更多关于Maven的信息,参考http://maven.apache.org/,Gradle信息请参考http://www.gradle.org/。
十分有必要提到,Guava仅有一个依赖,JSR-305。
【JSR-305是Java语言中定义用于检测缺陷的注解的规范。更多内容参考http://jcp.org/en/jsr/detail?id=305。】
如果你不打算直接使用JSR-305JAR,可以不用在依赖中包含。如果打算使用JSR-305,必须显示地声明这一依赖,因为它不会自动地被拉进来。如果你打算在Scala中使用,必须包含JSR-305JAR文件。Java编译器在编译时不需要这个库包含注解,但是Scala编译器需要。将来这一现象可能会变化,截至目前,如果打算在Scala中使用Guava,必须在classpath中包含JSR-305JAR文件。
获取书中源码
书中源码以Java工程进行组织,符合Gradle或者Maven的结构。之前提到过,大部分源码是单元测试的形式。如果没有安装Gradle或者Maven,强烈建议安装其中一个,运行单元测试会变得轻松,拉取Guava和工程所需的一切依赖。
以下是获取和使用源码的步骤:
- 下载源码http://www.packtpub.com/support;
- 解压缩;
- 进入guava-book-code文件夹下;
- 如果安装了Gradle,运行gradle install;
- 如果安装了Maven,运行mvn install。
上述步骤会安装源码所需的Guava和依赖。如果一切顺利,你会看到一大波单元测试被执行并通过。强烈建议使用之前提到的构建工具。这样在修改Guava版本和运行书中测试的时候会很轻松,看看是否有变化。如果没有安装构建工具,你需要下载一下的依赖才能运行书中列出的例子。
- Lucence v4.2: http://lucene.apache.org/
- Spring Java Version 3.2: http://www.springsource.org/springframework
- H2(embedded database) v1.3.170: http://www.h2database.com/html/main.html
- JUnit v4.11: https://github.com/junit-team/junit/wiki/Downloadand-Install
书中源码在MacBook Pro v10.7.5,Java 7,Gradle构建系统,IntelliJ IDE环境下完成。
总结
到目前为止,我们重温了一下Guava简短的历史和它如何提高代码质量、简化工作。我们认识到使用一个测试充分的库而不是自己从头开发的重要性。最后,我们提到从哪获得Guava,如何安装,如何下载源码。下一章,我们开始探索Guavacom.google.common.base包中的工具类和com.google.common.collect包的ComparisonChain类。