Googlevarargsが のパラメータに使用する理由は何AsyncTaskですか? たとえば、メソッドexecute()、doInBackground()およびpublishProgress()すべては[Type]...表記法を使用します。
それが使いにくいと思うので、私が見落としていた正当な理由があるに違いありませんか?
したがって、パラメータがないか、1 つまたは複数のパラメータがあります。それを分解しましょう:
パラメーターなし(簡単):
ParamsパラメーターはVoidそれだけです。(メソッドはそれを使用できません...そのため、かなり安全です。)1 つのパラメーター: ここでは、少なくとも、
doInBackground()メソッドの開始時にチェックを行う必要があると感じています。たとえば、 を受け取ってIntegertype の結果を生成するタスクは次の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);
}
}
いつ実用化されるかわかりません。しかし、私が知る必要のあるキュリアが欠けていると確信しています。:)