質問: Androidプログラムで、非同期処理を行うために ``` public class aTask extends AsyncTask {} ``` というclassがあります。 extendsは親classであるのはわかりますが、`<>`がどういう意味(機能)なのか教えていただけませんか? 一応、調べたところによると > > 1番目のParamsはバックグラウンド処理を実行する時にUIスレッド(メインスレッド)から与える引数の型で、2番目のProgressは進捗状況を表示するonProgressUpdateの引数の型です。最後のResultはバックグラウンド処理の後に受け取る型です。 > > > ということはわかりましたが、もともと`<>`が何のための機能なのか知りたい次第です。 よろしくお願いします。
回答: Java のジェネリクスというものです。 Android API としての AsyncTask 側の設計では、特にこの 3 つの `` について型を決めているわけではありません。つまり、中身がどういう型のオブジェクトなのか関知していません。左から右に横流しにしているだけです。 ``というようにした場合は、1 番目が Bitmap、2 番目が Integer、3 番目が Bitmap が引数として渡されることになりますが、本来 AsyncTask 側としてはパスしているだけで、何でもいいわけです。 間違って、`String, Long, Date`で渡されてしまっても、AsynkTask 側でコンパイル時にチェックせず、実行時に矛盾が生じてエラーやバグになります。これが、ジェネリクスを使わない場合。 ジェネリクスによって、受け渡しする引数の型を明示できるので、コンパイル段階で、型に矛盾がないかどうかをチェックできます。 AsyncTask という API の利用者側の立場とすれば、ジェネリクスの形になっているので、`Params, Progress, Result` の部分には好きな型の変数を受け渡しするのに使えるんだなと思っておいても ok ではないかと思います。不要であれば、`Void`にしておけばいいです。