2011-06-14 11 views
22

내가AsyncTask를의 doInBackground (에 Params ... PARAMS)

라는 것은 이러한 유형은 무엇입니까 doInBackground(Params... params)의 매개 변수 구문에 익숙 해요, 내가 그것을 어떻게 사용합니까?

+2

이 당신에게 어떻게 PARAMS 작업의 더 나은 이해를 줄 것이다 말할 수있는 것을 의미한다. android.com/reference/android/os/AsyncTask.html – dymmeh

+0

전체 설명은 여기를 참조하십시오. http://stackoverflow.com/questions/6053602/what-arguments-are-passed-into-asynctaskarg1-arg2-arg3/6053673# 6053673 –

답변

55

는 말했다 .. 바르 인수가 .. 그냥 배열처럼 ... U는 여러 항목을 전달할 수 있습니다 단지 등 params[0]처럼 액세스라고합니다.

public void makeLemonade(String[] args) { 

public void makeLemonade(String... args) { 

방법 내부의 코드가 동일 할 것이지만,이 호출되었을 때, 그들은 다르게 호출 할 것이다 : 효과적으로, 다음 두 줄의 코드는 동일합니다. 두 번째의 방법 서명 인수 (가정 된) 무한대에 0을 가질 수있는 동안

makeLemonade(new String[]{"lemon1", "lemon2", "lemon3"}); 

을하지만, 그들은 모두 문자열 인수 할 필요가있다 : 첫 번째는 다음과 같이 호출 할 필요가있다. 다음 통화는 모두 작동합니다 :

makeLemonade("lemon1"); 
makeLemonade("lemon4", "lemon7", "lemon11", "lemon12"); 
makeLemonade(); 
// ... etc ... 

둘 사이의 미묘한 차이는 가변 인자를 사용하는 경우 당신이 합법적으로) makeLemonade를 (호출 할 수 있다는 것입니다.

+4

완벽한 설명. 감사. – dfetter88

+0

@Travis 인수가 전달되지 않는다는 것을 어떻게 나타내십니까? 무작위 유형을 선택해야합니까? –

+0

인수가 전달되지 않음을 나타 내기 위해 메소드 서명에는 매개 변수가 포함되지 않으므로 위의 "public void makeLemonade (String ... args)"를 볼 때 "public void makeLemonade()"를 대신 사용하십시오. . 이것은 컴파일러에게 인수가 허용되지 않는다는 것을 알려줍니다. 0 개의 인자를 가진 메소드를 호출하고 싶다면, 그것은 완벽하게 유효합니다. 그냥 그렇게하고 "makeLemonade()"를 호출하면됩니다. – Travis

3

그들은 그 "가 가변 인자"라고하며,

데바와 VVV으로
1

Params... params은 vararg를 나타냅니다. 이것은 J2SE5.0에 추가되었습니다. HTTP : // 개발자 그것은 당신이 인수의 수를 전달할 수 있습니다 또는 인수 PARAMS의 배열 [0]

감사 디팍