Intereting Posts
Как вы имеете дело с кодом ошибки LicenseCheckerCallback.ERROR_NOT_MARKET_MANAGED? Должен ли я использовать! = Или == сначала при реализации if else для сравнения ArrayList проверяет, существуют ли данные Как показать PopupWindow всегда над кнопкой (просмотр)? Как нарисовать много прямоугольников на холсте с хорошей производительностью? Закончить дочернюю активность, когда родительская активность прекращается Каковы значения по умолчанию для соединений и тайм-аутов сокетов в DefaultHttpClient на Android? Закрытие ProgressDialog onClick Установить изображение из выталкиваемого в качестве маркера в Google Map версии 2 Как создать образцы проектов Android с помощью Ant? Build.xml не существует Изменить язык элемента навигации Не удается разрешить символ «GooglePlayServicesClient» Невозможно обновить текст фрагментов при обмене картами Никогда не получал полный 480 * 800 при использовании 2D ортогональной проекции в opengl-es Нет необходимости регистрировать базовый класс активности в манифесте?

Что означает синтаксис «final String … args» / do?

Это должен быть довольно простой вопрос для ответа. Я огляделся и не мог найти ни одной темы этого синтаксиса, а «…» затрудняет поиск в Google. Я работаю над простым тестовым приложением для копирования файла базы данных из его защищенного места на неуправляемом телефоне Android в место на SD-карте, которое я могу получить для просмотра с помощью инструмента просмотра базы данных sqlite3 . Я знаю, что это похоже на окольный способ делать что-то, но эмулятор отказывается открываться на моем нетбуке, поэтому я использую свой мобильный телефон для проверки разработки прямо сейчас.

Код уже написан, поэтому я заимствую его отсюда и адаптирую его к своему коду. Я столкнулся с этим небольшим фрагментом кода:

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 before. Что это значит / делать?

Спасибо! Moscro

Эллипсы в аргументе в 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

Три периода после окончательного параметра указывают, что последний аргумент может быть передан как массив или как последовательность аргументов. Варгары могут использоваться только в конечной позиции аргумента. Учитывая новое объявление varargs для MessageFormat.format, вышеупомянутый вызов может быть заменен следующим более коротким и более сладким вызовом

И final имеет обычное значение. BTW, эта функция доступна в Java5 или новее.

См. http://www.developer.com/java/other/article.php/3323661.

Как упоминалось выше в двух ссылках, это ничего, кроме sugared массива. В основном, когда вы определяете myMethod(T... vararg) , Java видит его как myMethod(T[] vararg) . И когда вы вызываете, myObj.myMethod(t1, t2, t3, ..., tn) , Java передает его как myObj.myMethod(new T[]{t1, t2, t3, ..., tn}) .

final средства args не могут быть переназначены в doInBackground . String... является « vararg ». Вы можете передать любое количество объектов doInBackground методу doInBackground .

String... действительно является String[] – это буквально массив из String и может быть доступен как таковой.