18755


Androidプログラムで、非同期処理を行うために

[code]

    public class aTask extends AsyncTask<Bitmap, Integer, Bitmap> {}
    
[/code]

というclassがあります。

extendsは親classであるのはわかりますが、`<>`がどういう意味（機能）なのか教えていただけませんか？  
一応、調べたところによると

>
> 1番目のParamsはバックグラウンド処理を実行する時にUIスレッド（メインスレッド）から与える引数の型で、2番目のProgressは進捗状況を表示するonProgressUpdateの引数の型です。最後のResultはバックグラウンド処理の後に受け取る型です。

ということはわかりましたが、もともと`<>`が何のための機能なのか知りたい次第です。  
よろしくお願いします。


CC BY-SA 3.0
2015-11-12T15:15:17.593
18752
2015-11-12T20:20:19.913
2015-11-12T20:20:19.913
7290
8593
question
android java android-asynctask
Androidのextends AsyncTask<,,>について


Java
の[ジェネリクス](https://docs.oracle.com/javase/jp/7/technotes/guides/language/generics.html)というものです。

Android API としての
[AsyncTask](http://developer.android.com/intl/ja/reference/android/os/AsyncTask.html)
側の設計では、特にこの 3 つの `<Params, Progress, Result>`
について型を決めているわけではありません。つまり、中身がどういう型のオブジェクトなのか関知していません。左から右に横流しにしているだけです。

`<Bitmap, Integer, Bitmap>`というようにした場合は、1 番目が Bitmap、2 番目が Integer、3 番目が Bitmap
が引数として渡されることになりますが、本来 AsyncTask 側としてはパスしているだけで、何でもいいわけです。

間違って、`String, Long, Date`で渡されてしまっても、AsynkTask
側でコンパイル時にチェックせず、実行時に矛盾が生じてエラーやバグになります。これが、ジェネリクスを使わない場合。

ジェネリクスによって、受け渡しする引数の型を明示できるので、コンパイル段階で、型に矛盾がないかどうかをチェックできます。

AsyncTask という API の利用者側の立場とすれば、ジェネリクスの形になっているので、`Params, Progress, Result`
の部分には好きな型の変数を受け渡しするのに使えるんだなと思っておいても ok ではないかと思います。不要であれば、`Void`にしておけばいいです。


CC BY-SA 3.0
2015-11-12T16:16:09.457
18755
2015-11-12T16:16:09.457
7290
18752
answer