はじめに
第5回目の本稿は、java.utilパッケージから主にコレクションと呼ばれるAPIを中心に解説します。コレクションとは、複数のオブジェクトを集合としてあつかう仕組みのことで、Android開発においてもよく使用されるものです。後半では、AndroidのGUIと非同期処理の問題をとりあげます。
なおjava.utilパッケージの各クラスの詳細な仕様については、オンラインのJava Platform, Standard Edition 6 API仕様や参考書籍などをご覧ください。
対象読者
Androidアプリケーションの開発を始めたい方で、JavaとEclipseのごく基本的な知識がある方を対象とします。
ジェネリックス
コレクションの前に、まずジェネリックスについて少し説明しておきましょう。
ジェネリックスとは、<>で囲んだ型名(型パラメータ)をクラスやメソッドに付加して定義し、汎用的なクラスをコンパイル時に特定の型に対応づけるようにする機能で、J2SE 5.0から導入されました。
ジェネリックスでのクラス定義
ジェネリックスを用いたクラス定義は、例えば次のようになります。
class GenericSample<T> { T val; public void set(T val) { this.val = val; } }
GenericSample<T>のTが型パラメータです。型パラメータには、任意の文字が利用できますが、通常TやE、Kといった、その型の使用目的や意味を表す名称(Type、Element、Keyなど)の先頭大文字1文字を用います。
このクラスをインスタンス化するには、次のようにコンストラクタで型を指定します。こうすることで、型パラメータのTの部分が指定した型に置き換わります。setメソッドの引数も指定した型になるので、他の型を使うと、コンパイルエラーとなってしまいます。
// Integerクラスを指定したGenericSample GenericSample<Integer> sample1 = new GenericSample<Integer>(); sample1.set(123); // Stringクラスを指定したGenericSample GenericSample<String> sample2 = new GenericSample<String>(); sample2.set("文字列"); // 型が異なるのでコンパイルできない // sample2.set(123);
java.utilパッケージ
java.utilパッケージやその下位パッケージで提供されるAPIには、今回紹介するコレクション関連の他、プロパティ、乱数、タイマー、ロケール、正規表現といった、文字通りユーティリティ機能のものが数多くあります。ただ紙面に限りがありますので、コレクション以外のAPIについては、また回をあらためて紹介することにします。
Android SDK APIレベルについて
Android SDKに含まれるjava.utilパッケージは、現行のJava SE 6のパッケージとまったく同じというわけではありません。API Levelが低いと、Java SE 6のjava.utilパッケージに含まれるクラスやメソッドの一部が、実装されていない場合があります。
例えば、後述するQueueインターフェースのaddメソッドは、API Level 11以降で実装されました。またQueueインターフェースを拡張したDequeインターフェースは、API Level 9以降でしか使用することができません。
その他、API Levelの微妙な違いは、Android Developersサイトで確認するようにしてください。