这应该是一个相当简单的问题。我环顾四周,找不到有关此语法的任何主题,并且“...”使得在 Google 上搜索变得困难。我正在开发一个简单的测试应用程序,用于将数据库文件从其在无根 Android 手机上的 protected 位置复制到 SD 卡上的某个位置,我可以访问该位置以使用 sqlite3 database viewing tool 进行查看。我知道这似乎是一种迂回的做事方式,但模拟器拒绝在我的上网本上打开,所以我现在正在使用我的手机测试开发。

代码已经写好了,所以我是 borrowing it from here 并将它改编成我的代码。我遇到了这个小代码 fragment :

private class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> {
  private final ProgressDialog dialog = new ProgressDialog(ManageData.this);

  // can use UI thread here
  protected void onPreExecute() {
     this.dialog.setMessage("Exporting database...");
     this.dialog.show();
  }

  // automatically done on worker thread (separate from UI thread)
  protected Boolean doInBackground(final String... args) {

我以前从未见过 final String... args 参数。这是什么意思/做什么?

谢谢!
莫斯科

最佳答案

Java 中参数中的省略号表示该类型的 vararg 。因此,在您的情况下, ... 意味着您可以将任意数量的 String 参数传递给 doInBackground 方法。

因此,您可以调用此方法 doInBackground("String1", "String2", "String3")doInBackground("String1")doInBackground("String1", "String2", "String3", "String4") 或任何其他形式。

看到这里http://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html


final 有它通常的含义。顺便说一句,此功能在 Java5 或更新版本中可用。

引用:http://www.developer.com/java/other/article.php/3323661

正如上面两个链接所提到的,它只不过是加糖的数组。基本上,当您定义 myMethod(T... vararg) 时,Java 将其视为 myMethod(T[] vararg) 。当您调用 myObj.myMethod(t1, t2, t3, ..., tn) 时,Java 会将其作为 myObj.myMethod(new T[]{t1, t2, t3, ..., tn}) 传递。

10-07 21:55