2011-02-26 2 views
6

이것은 대답하기에 매우 간단한 질문입니다. 주변을 둘러보고이 구문에 대한 주제를 찾을 수 없으며 '...'은 Google에서 검색하기가 어렵습니다. 데이터베이스 파일을 뿌리깊은 안드로이드 폰의 보호 된 위치에서 sqlite3 database viewing tool으로 볼 수있는 SD 카드상의 장소로 복사하는 간단한 테스트 애플리케이션을 만들고 있습니다. 나는 이것이 일을하는 원형처럼 보일지 모르지만, 에뮬레이터는 내 netbook을 열지 않기 때문에 지금 당장 개발을 테스트하기 위해 핸드폰을 사용하고 있습니다."final String ... args"구문은 무엇을 의미합니까 /해야합니까?

코드가 이미 작성되어 있으므로 borrowing it from here이고 코드에 맞게 수정했습니다. 나는 코드의이 작은 조각 건너했습니다

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을 본 적이 없습니다. 이것은 무엇을 의미합니까 /할까요?

감사합니다. Moscro

답변

11

Java의 인수에있는 타원은 형식의 vararg을 의미합니다. 따라서 귀하의 경우 ...은 doInBackground 메소드에 원하는 수의 String 매개 변수를 전달할 수 있음을 의미합니다.

따라서이 메서드는 doInBackground("String1", "String2", "String3") 또는 doInBackground("String1") 또는 doInBackground("String1", "String2", "String3", "String4") 또는 다른 형식으로 호출 할 수 있습니다.

최종 파라미터의 입력 후에 3 개주기 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

으로는 설탕 배열 아무것도 없습니다. 기본적으로 myMethod(T... vararg)을 정의하면 Java는 myMethod(T[] vararg)으로 간주합니다. 그리고 myObj.myMethod(t1, t2, t3, ..., tn)으로 전화하면 Java는 myObj.myMethod(new T[]{t1, t2, t3, ..., tn})으로 전달합니다.

+0

모두 도움을 주셔서 감사합니다. – moscro

4

finalargsdoInBackground에서 다시 할당 할 수 없습니다. String...은 "vararg"입니다. String 개체를 임의의 수로 doInBackground 메서드에 전달할 수 있습니다.

String...은 실제로 String[]입니다. 문자 그대로 String의 배열이며 이와 같이 액세스 할 수 있습니다.