2011-02-26 26 views
6

Đây phải là một câu hỏi khá đơn giản để trả lời. Tôi nhìn xung quanh và không thể tìm thấy bất kỳ chủ đề nào về cú pháp này và "..." làm cho việc tìm kiếm nó trở nên khó khăn trên Google. Tôi đang làm việc trên một ứng dụng thử nghiệm đơn giản để sao chép tệp cơ sở dữ liệu từ vị trí được bảo vệ của nó trên điện thoại Android chưa root vào một vị trí trên Thẻ SD mà tôi có thể truy cập để xem với sqlite3 database viewing tool. Tôi biết điều này có vẻ giống như một cách xoay vòng để làm mọi thứ, nhưng giả lập từ chối mở trên netbook của tôi, vì vậy tôi đang sử dụng điện thoại di động của mình để kiểm tra sự phát triển ngay bây giờ.Cú pháp "final String ... args" có nghĩa là gì/làm gì?

Mã đã được viết, vì vậy tôi là borrowing it from here và thích ứng với mã của tôi. Tôi đã xem đoạn mã nhỏ này:

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) { 

Tôi chưa bao giờ thấy đối số final String... args trước đây. Điều này có nghĩa là gì?

Cảm ơn bạn! Moscro

Trả lời

11

Dấu ba chấm trong đối số trong Java có nghĩa là vararg loại. Vì vậy, trong trường hợp của bạn, ... có nghĩa là bạn có thể chuyển bất kỳ số tham số chuỗi nào vào phương thức doInBackground.

Vì vậy, bạn có thể gọi phương thức này doInBackground("String1", "String2", "String3") hoặc cũng doInBackground("String1") hoặc cũng doInBackground("String1", "String2", "String3", "String4") hoặc bất kỳ hình thức nào khác.

Xem ở đây http://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

Ba giai đoạn sau khi loại thông số cuối cùng của chỉ ra rằng đối số cuối cùng có thể được thông qua như là một mảng hoặc như là một chuỗi các đối số. Varargs chỉ có thể được sử dụng ở vị trí đối số cuối cùng. Với khai báo varargs mới cho MessageFormat.format, lời gọi trên có thể được thay thế bằng lời gọi ngắn hơn và ngọt ngào sau đây

final có ý nghĩa thông thường. BTW, tính năng này có sẵn trong Java5 hoặc mới hơn.

Tham khảo: http://www.developer.com/java/other/article.php/3323661

Khi hai liên kết ở trên đề cập, nó không có gì nhưng mảng có đường. Về cơ bản, khi bạn xác định myMethod(T... vararg), Java xem nó là myMethod(T[] vararg). Và khi bạn gọi, myObj.myMethod(t1, t2, t3, ..., tn), Java chuyển nó thành myObj.myMethod(new T[]{t1, t2, t3, ..., tn}).

+0

Tuyệt vời, cảm ơn vì trợ giúp tất cả! – moscro

4

final có nghĩa là args không thể được chỉ định lại trong doInBackground. String... là "vararg". Bạn có thể chuyển bất kỳ số đối tượng String nào vào phương thức doInBackground.

String... thực sự là một String[] - theo nghĩa đen là một mảng String và có thể được truy cập như vậy.

Các vấn đề liên quan