(厳密に言えば)複数のプリミティブをAsyncTaskに渡すことはできません。たとえば、対応する方法で実行myTask.execute(long1, long2)
してセットアップを試みたい場合は、次のようにしますprivate class myTask extends AsyncTask<long, Void, Void>
。
@Override
protected LocationItemizedOverlay doInBackground(long... params) {...}
IDEは、スーパータイプメソッドをオーバーライドする必要があると文句を言う可能性があります。あなたは、いわゆる使用していることを注意可変引数のメソッドのシグネチャをdoInBackground
、(long... params)
私は配列と呼ばれるのparamsとして格納され、long型の変数の数を受け入れる」というようなものです。私は完全にコンパイラ/ IDEの苦情の原因を理解していないが発生します、しかし、それはジェネリッククラスParams
がどのように定義されているかに関係していると思います。
いずれの場合も、プリミティブをそれぞれの非プリミティブラッパー(たとえば、int => Integer、long => Longなど)に正しくキャストすれば、問題なく目的を達成できます。実際には、プリミティブを非プリミティブに明示的にキャストする必要はありません。Javaはあなたのためにそれを処理するようです。次のようにASyncTaskを設定する必要があります(longの例の場合)。
private class MyTask extends AsyncTask<Long, Void, Void> {
@Override
protected void doInBackground(Long... params) {
long myFirstParam = params[0]
}
...
}
その後、最初に意図したとおりにこのクラスを使用できます。例:
MyTask myTask = new MyTask();
myTask.execute(long1, long2);
または、必要なプリミティブの数に応じて、それらが同じタイプであることが提供されます。複数のタイプのプリミティブを渡す必要がある場合は、これも実行できますが、上記を次のように変更する必要があります。
private class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected void doInBackground(Object... params) {
long myLongParam = (Long) params[0];
int myIntParam = (Integer) params[1];
}
...
}
これはより柔軟性がありますが、パラメーターをそれぞれのタイプに明示的にキャストする必要があります。この柔軟性が必要ない場合(つまり、単一のデータ型)、少し読みやすいので、最初のオプションを使用することをお勧めします。