Googlevarargs
が のパラメータに使用する理由は何AsyncTask
ですか? たとえば、メソッドexecute()
、doInBackground()
およびpublishProgress()
すべては[Type]...
表記法を使用します。
それが使いにくいと思うので、私が見落としていた正当な理由があるに違いありませんか?
したがって、パラメータがないか、1 つまたは複数のパラメータがあります。それを分解しましょう:
パラメーターなし(簡単):
Params
パラメーターはVoid
それだけです。(メソッドはそれを使用できません...そのため、かなり安全です。)1 つのパラメーター: ここでは、少なくとも、
doInBackground()
メソッドの開始時にチェックを行う必要があると感じています。たとえば、 を受け取ってInteger
type の結果を生成するタスクは次のDouble
とおりです。public Double doInBackground(Integer... myParameters) { // we are only expecting one parameter if (myParameters.length != 1) throw new IllegalArgumentException("!= 1"); return 100d * myParameters[0]; }
複数のパラメータ。Google が正しい選択をしたのはここでしょうか。しかし、私が見るように、同じタイプのパラメーターのリストに興味があるか、異なるタイプのパラメーターが必要です。Google はこれらのケースの 1 つだけに対処しました (型が異なると、ある種の共通インターフェイスが必要になります。多くの場合、最終的に
Object...
は型安全ではありません...)
varargs
では、完全に削除した場合、何が問題になるのでしょうか? メソッドのサブセットを次に示します。
class AsyncTask<Param, Progress, Result> {
abstract Result doInBackground(Param param);
void publishProgress(Progress progress) { ... }
}
これは、上記のすべてのケースで機能します。たとえば、パラメーターの配列を処理したい場合は、配列型を使用できますparam
。
class MyAsyncTask extends AsyncTask<String[], Integer, String> {
String doInBackground(String[] param) {
return Arrays.toString(param);
}
}
いつ実用化されるかわかりません。しかし、私が知る必要のあるキュリアが欠けていると確信しています。:)