Kengo's blog

Technical articles about original projects, JVM, Static Analysis and TypeScript.

「それ、Guavaでできるよ」系の話

Javaってこれがめんどうだよねー」「あ、それGuavaでマシになりますよ」というやりとりが多い気がするので代表例をいくつか書いてみる。気になった方は公式ドキュメントをぜひ。

便利系Map

Mapの実装を作るのが面倒

ForwardingMapのサブクラスを作る……というのも良いが、そもそもMapをなぜ実装しなければならないかを確認したほうが良い。

例えば突っ込むキーや値を制限したいならMapConstraintsを使う。キャッシュのために特殊なMapを作りたいなら、MapMakercacheパッケージを見てみる。

コレクションをいい感じにゴニョゴニョ

FluentIterableIteratorsIterablesをひととおり見ておく。

ついでに、UnmodifiableIteratorPeekingIteratorも知っておくと良いです。Unmodifiableで始まるクラス群はメソッドの戻り値として積極的に使いたい。

リソース閉じ漏れ防止

Java7でtry with resourcesができてだいぶマシになったリソースハンドリングですが、何らかの理由でJava6以前を使っている場合は依然として面倒です。

私はCloseablesを使っていましたが、Release 14からできたCloserもわりと便利そうです。複数のリソースを管理している場合は特に有効かと。

便利系Stream

何バイト読み込んだかカウントしてporgressを表示したい、ユーザがアップロードしたデータが大きすぎる場合は例外を投げたい、データをオンメモリで処理したいがOOMEは気にしたい、などWEBアプリ実装に置いてよくありそうなニーズをサクっと実装できます。

ResourcesFilesもひと通り眺めておくと良いです。

FutureよりCallbackがいい

ListenableFutureまわりを見てみると良いです。 Serviceも場合によっては有効そうですが、使ったことがないのであまり語れません。