2015-01-01 2 views
-1

다음 기사에서 전환을 학습했습니다 : Transitions - ADP.보기 ...보기 란 무엇입니까? 어떻게 작동합니까?

그가 구현 한 방법 toggleVisibility() 다음과 같이 내가 View... views이 방법의 모든 view 매개 변수를 나타낸다는 것을 이해 위에서

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); 
     } 

. 그러나, 나는 전에이 ... 연산자를 보지 못했습니다. 이게 뭐야? 어떻게 작동합니까? 나는 봤다 견과류는 어떤 anser 얻을 수 없습니다. 누구든지 나를 도울 수 있습니까?

+4

이 질문보기 http://stackoverflow.com/questions/3158730/java-3-dots-in-parameters –

답변

4

을 가변 개라고합니다. 이 메소드를 사용하면 원하는 수의 뷰 (0 이상)를 전달할 수 있습니다.

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

그것은 방법에 View[] 배열을 전달하는 것과의 :

당신은 함께 예를 들어, 전화를 걸 수 있습니다.

메서드 호출을 작성할 때 컴파일러는 해당 메서드 호출에 전달 된 매개 변수를 호출하여 호출 할 가장 적합한 메서드를 찾기 위해 같은 이름을 가진 모든 메서드의 분석기 목록을 찾습니다. View의 인스턴스가 0 개 (모두 메서드 호출의 마지막 매개 변수 여야 함)는 메서드 정의의 인수 (마지막 매개 변수 여야 함)와 일치 할 수 있습니다. 이 메소드에서 View... 변수를 View[] 유형 (즉, 배열)의 변수로 처리 할 수 ​​있습니다.

varargs 매개 변수는 가장 적합한 오버로드 된 메서드를 호출 할 때 우선 순위가 가장 낮습니다. 따라서 toggleVisibility()을 오버로드하면 컴파일되고 아무런 인수없이 toggleVisibility()을 호출하면 인수가없는 메서드가 호출됩니다. 비슷하게, varargs 버전보다 우선하는 toggleVisibility(View v)을 선언 할 수 있지만, varargs의 요점은 동일한 이름의 여러 메소드를 정의 할 필요가없고 매개 변수의 개수가 다른 동일한 유형의 매개 변수를 정의해야한다는 점을 저장하는 것입니다 같은 유형.

+0

감사합니다 ...하지만 어떻게 작동합니까? 메서드는 여러 매개 변수가 있고 구현은 하나뿐이라는 의미입니다. – xyz

+0

그러나 메소드 toggleVisibility()를 오버로드하면 어떻게됩니까? 오류가 발생합니까? – xyz

+0

감사합니다.이 모든 것을 대답에 넣을 수 있습니까? 부디! – xyz

3

보기 ...보기는 가변 매개 변수입니다. 즉, 별도의 인수 인 것처럼 쉼표로 구분하여 여러보기를 전달할 수 있습니다. 그런 다음이 함수는 해당 매개 변수 뷰를 내부에서 전달되는 모든 인수가 포함 된 컬렉션으로 처리 할 수 ​​있습니다.

+1

varargs입니까? – xyz

+1

예. Varargs는 가변 인수에 대해 짧습니다. –

+0

감사합니다 ...하지만 어떻게 작동합니까? 메서드는 여러 매개 변수가 있고 구현은 하나뿐이라는 의미입니다. - – xyz

0

이것은 가변적입니다. 함수에 0 개 또는 여러 개의 인수를 전달할 수 있습니다. 그것은 varagas도 하나의 변수 인수 기능 허용됩니다

1 변수 인수

이라고 당신이 varagas이 규칙이를 함수의 오버로드 된 버전을 사용 또는 배열 입력 (일반적인 해결 방법)을 사용하여 피할 수

2 가변 인수는

void doSomething1(String... values, int x){}

void doSomething2(String... values, int... vals)이 컴파일시 에러

에게 제공하는 컴파일시 에러에게주는 마지막 인수해야 자세한 내용은3210

을 참조하십시오. Varagas Docs

+0

첫 번째 규칙은 여기에서 볼 수 없습니다. http://viralpatel.net/blogs/varargs-in-java-variable-argument-method-in-java-5/ – xyz