AsyncTask varargs 参数的用途
Google 在 AsyncTask
中使用参数的原因是什么?例如,execute()
、doInBackground()
和 publishProgress()
方法都使用这种表示法。varargs
[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]; }
多个参数。现在这里一定是谷歌做出正确选择的地方吗?但正如我所看到的,要么是你对相同类型的参数列表感兴趣,要么是你想要不同类型的参数。Google只解决了其中一种情况(对于不同类型的情况,您需要某种通用界面。在许多情况下,我最终会得到,这并不是真正的类型安全...)
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);
}
}
我看不出它什么时候可以有任何实际用途。但我确信我错过了一些我需要知道的教廷。:)