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);
}
}
我看不出它什么时候会有实际用途。但我确定我错过了一些我需要知道的东西。:)