GoogleによるJavaのコアライブラリー:Guava
Guava: Google Core Libraries for Javaというものがある。大ざっぱに言えばGoogleがJavaを使ってなんらかのプロジェクトを作成する際に利用する「公式」ライブラリーである。
C++にBoostという多岐にわたるライブラリーがあるが、GoogleのGuavaはJavaにおけるBoost的な存在と言えるだろう。
どちらかというとファンダメンタルな項目が多岐にわたって含まれており、なんらかのメソッドを開発しようとする前にここにないか確認してから着手した方が良いと思う。
プロジェクトがAndroid対応やJDK 1.7以前のものに依存する場合もJDK 1.8以降の場合も同じメソッドが利用でき、それぞれの場合にMavenまたはGradleで切り分けるだけでよいというのも使いやすいと思われる。
FunctionalプログラミングやReactiveプログラミングで必要となるImmutableなコレクションも含まれており、RxJavaでImmutableなListを利用する際にも利用できる。こちらの使い方についてはまた項を改めて記載する。
Readmeの冒頭には
Guava is a set of core libraries that includes new collection types (such as multimap and multiset), immutable collections, a graph library, functional types, an in-memory cache, and APIs/utilities for concurrency, I/O, hashing, primitives, reflection, string processing, and much more!
Guava comes in two flavors.
- The JRE flavor requires JDK 1.8 or higher.
- If you need support for JDK 1.7 or Android, use the Android flavor. You can find the Android Guava source in the android directory.
とあり、日本語に訳すなら
Guavaは例えばmultimapやmultisetのような新たなコレクションや変更不可のコレクション、グラフライブラリー、関数型、インメモリーキャッシュ、同時実行用のAPI/ユーティリティ、I/O、ハッシュ、プリミティブ、リフレクション、文字列処理、さらにそれ以上のものを含むコアライブラリーである。
Guavaには大きく分けて二つの特性がある
- JDK 1.8以降を要する(場合に対応できる)JRE特性
- JDK 1.7やAndroidのサポートが必要となった時のためのAndroid特性。android directory内にAndroid Guavaソースを見出すことができる。
と言ったところだろう。
この二つの特性のどちらを用いるのかプロジェクトをビルドするMavenまたはGradleで選択する。
現在のパッケージ
どのようなものが含まれているかはSnapshot API Docsを参照すると本項記述時点で
com.google.common.annotations: Common annotation types.
com.google.common.base: Basic utility libraries and interfaces.
com.google.common.cache:This package contains caching utilities.
com.google.common.collect: This package contains generic collection interfaces and implementations, and other utilities for working with collections.
com.google.common.escape: Interfaces, utilities, and simple implementations of escapers and encoders.
com.google.common.eventbus: The EventBus allows publish-subscribe-style communication between components without requiring the components to explicitly register with one another (and thus be aware of each other).
com.google.common.graph: An API for representing graph (node and edge) data.
com.google.common.hash: Hash functions and related structures.
com.google.common.html: Escapers for HTML.
com.google.common.io: This package contains utility methods and classes for working with Java I/O; for example input streams, output streams, readers, writers, and files.
com.google.common.math: Arithmetic functions operating on primitive values and BigInteger instances.
com.google.common.net: This package contains utility methods and classes for working with net addresses (numeric IP and domain names).
com.google.common.primitives: Static utilities for working with the eight primitive types and void, and value types for treating them as unsigned.
com.google.common.reflect: This package contains utilities to work with Java reflection.
com.google.common.util.concurrent: Concurrency utilities.
com.google.common.xml: Escapers for XML.
ざっとみただけでもかなりのものがあり、車輪を再発明しないために利用するのも手だと思える。注意点としてBetaのものは変更、削除される可能性があるので避けた方が良いと言うこと。それにGoogleが利用を推奨しているわけでもないと思うのでむやみに使って「意味不明」のバグに悩まされる可能性もゼロではないことが挙げられる。