AsyncTask的doInBackground(Params... params)

23

我不熟悉 doInBackground(Params... params) 中的参数语法。

这种类型的东西叫什么,我该如何使用它?


2
这将让您更好地了解params的工作原理:http://developer.android.com/reference/android/os/AsyncTask.html - dymmeh
在这里阅读完整描述:https://dev59.com/m2025IYBdhLWcg3wW0ux#6053673#6053673 - Kartik Domadiya
3个回答

59

正如devA和VVV所说,这被称为"可变参数"。实际上,以下两行代码是等效的:

public void makeLemonade(String[] args) {

public void makeLemonade(String... args) {

方法内部的代码将是相同的,但当它被调用时,它们将以不同的方式被调用。第一个需要像这样调用:

makeLemonade(new String[]{"lemon1", "lemon2", "lemon3"});

第二个方法的签名可以有0到(假定的)无限数量的参数,但它们都需要是字符串参数。以下所有调用都可以正常工作:

makeLemonade("lemon1");
makeLemonade("lemon4", "lemon7", "lemon11", "lemon12"); 
makeLemonade();
// ... etc ...

两者之间微妙的区别在于,如果你使用可变参数,在这里可以合法地调用makeLemonade()。


@Travis 你如何表示不需要传递参数?你必须选择一个随机类型吗? - David Doria
为了表示不需要传递参数,您的方法签名将不包括任何参数。因此,在上面看到的 "public void makeLemonade(String... args)" 中,您应该使用 "public void makeLemonade()"。这告诉编译器不允许传递参数。如果您想使用 0 个参数调用该方法,那是完全有效的,您只需调用 "makeLemonade()" 即可。 - Travis

3
他们被称为Var Args(可变参数).. 就像数组一样.. 您可以传递多个项目,并像params [0]一样访问它们.. 等等..

1

Params... params 表示可变参数。它在 J2SE5.0 中被添加。 这意味着您可以传递任意数量的参数或者说是参数数组 params[0]

谢谢 Deepak


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接