2015-01-01 3 views
-1

Я изучаю Переходы из следующей статьи: Transitions - ADP.Что такое View ... views? Как это работает?

Он реализован метод toggleVisibility() следующим образом:

public void onClick(View v) { 
     TransitionManager.beginDelayedTransition(mRootView, new Fade()); 
     toggleVisibility(mRedBox, mGreenBox, mBlueBox, mBlackBox); 
    } 

    private static void toggleVisibility(View... views) { 
     for (View view : views) { 
      boolean isVisible = view.getVisibility() == View.VISIBLE; 
      view.setVisibility(isVisible ? View.INVISIBLE : View.VISIBLE); 
     } 

Сверху я понимаю, что View... views представляет все view параметры в методе. Но я никогда не видел этого оператора .... Что это? Как это работает? Я googled орех не мог получить любой anser. Может кто-нибудь мне помочь?

+4

См. Этот вопрос http://stackoverflow.com/questions/3158730/java-3-dots-in-parameters –

ответ

4

... называется varags. Он позволяет передавать любое количество просмотров (0 или более) в этот метод.

Вы можете назвать это, например, с:

toggleVisibility(); // no views 
toggleVisibility(view1); // one view 
toggleVisibility(view1,view2); // two views 
... 

Это эквивалентно пропусканием View[] массива методом.

Когда вы пишете вызов метода, компилятор сопоставляет параметры, переданные этому вызову метода, в список agrument всех методов, имеющих одинаковое имя, чтобы найти лучший метод подбора. Нуль или более экземпляров View (все из которых должны быть последними параметрами в вызове метода) могут быть сопоставлены одному аргументу View... в определении метода (который должен быть последним параметром). Внутри метода вы можете обрабатывать переменную View... как переменную типа View[] (т. Е. Массив).

Параметр varargs имеет наименьшее приоритетное значение при определении наиболее подходящего перегруженного метода для вызова. Поэтому, если вы перегрузите toggleVisibility(), он будет скомпилирован, и вызов toggleVisibility() без каких-либо аргументов вызовет метод, у которого нет аргументов. Аналогично, вы можете объявить toggleVisibility(View v), который будет иметь приоритет над версией varargs, но точка в varargs должна помочь вам определить несколько методов с тем же именем и теми же параметрами, которые отличаются только количеством параметров этого такой же тип.

+0

спасибо ... но как это работает? Я имею в виду, что метод имеет несколько параметров и реализован только один! – xyz

+0

Но что, если я перегружаю метод toggleVisibility()? Это приведет к ошибке? – xyz

+0

спасибо .. вы можете положить все это в ответ? пожалуйста! – xyz

3

Просмотреть ... виды - это вариационный параметр. Это означает, что вы можете передать любое количество просмотров, разделенных запятыми, как если бы они были отдельными аргументами. Затем функция может рассматривать эти представления параметров как коллекцию со всеми аргументами, переданными внутри нее.

+1

Вы имели в виду varargs? – xyz

+1

Да. Varargs является коротким для вариативных аргументов. –

+0

спасибо ... но как это работает? Я имею в виду, что метод имеет несколько параметров и реализован только один! - – xyz

0

это varagas, это позволяет вам передавать ноль или несколько аргументов функции. Это позволяет избежать использования перегруженную версию функции или с помощью ввода массива (общий обходной путь) varagas имеет 2 правила, varagas также называются переменными аргументами

1- только одна переменная аргумент разрешено в функции

2 Переменный аргумент должен быть последним аргументом

void doSomething1(String... values, int x){} дает компиляцию ошибке времени

void doSomething2(String... values, int... vals) дает ошибку во время компиляции

для получения дополнительной информации, вид Varagas Docs

+0

Я не видел, чтобы ваше первое правило было здесь: http://viralpatel.net/blogs/varargs-in-java-variable-argument-method-in-java-5/ – xyz

 Смежные вопросы

  • Нет связанных вопросов^_^