java – 功能参数中3点的含义是什么?

前端之家收集整理的这篇文章主要介绍了java – 功能参数中3点的含义是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题在这里已经有一个答案:> Java,3 dots in parameters8
我正在阅读Android文档中的AsyncTask.
private class DownloadFilesTask extends AsyncTask<URL,Integer,Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

问题是doInBackground(URL … urls)这3个点是什么?

解决方法

这不是Android功能.这是一个Java功能(添加在Java 5中),因此您可以使用“自定义”参数.

这种方法

protected Long doInBackground(URL... urls) {
  for (URL url : urls) {
    // Do something with url
  }
}

和这个:

protected Long doInBackground(URL[] urls) {
  for (URL url : urls) {
    // Do something with url
  }
}

对于内部的方法是一样的.
整个不同之处在于您调用的方式.
对于第一个(也称为varargs),您可以简单地做到这一点:

doInBackground(url1,url2,url3,url4);

但是对于第二个,你必须创建一个数组,所以如果你试图在一行中做到这一点就像:

doInBackground(new URL[] { url1,url3 });

好的是,如果您尝试使用这种方式调用使用varargs编写的方法,它将以与否(后向支持)相同的方式工作.

猜你在找的Java相关文章