Google 使用varargs中的参数的原因是什么AsyncTask?例如方法execute(),doInBackground()并且publishProgress()都使用[Type]...符号。
我认为这使它“更难”使用,所以他们必须有一些我忽略的充分理由?
所以,要么我们没有参数,要么有一个参数,要么有多个参数。让我们分解一下:
无参数(简单):
Params参数就是Void这样。(这些方法不能使用它......所以这很安全。)一个参数:在这里,我至少觉得有必要在
doInBackground()方法的开头做一个检查。例如,这是一个接收Integer并产生类型结果的任务Double:public Double doInBackground(Integer... myParameters) { // we are only expecting one parameter if (myParameters.length != 1) throw new IllegalArgumentException("!= 1"); return 100d * myParameters[0]; }不止一个参数。现在这里一定是谷歌做出正确选择的地方吗?但正如我所见,要么你对相同类型的参数列表感兴趣,要么你想要不同类型的参数。谷歌只解决了其中一种情况(对于不同的类型,您需要某种通用接口。在许多情况下,我最终
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);
}
}
我看不出它什么时候会有实际用途。但我确定我错过了一些我需要知道的东西。:)