2014-04-15 43 views
11

Gần đây tôi đã xem một đoạn mã Java. Các định nghĩa hàm có định dạng khác với những gì tôi biết cho đến bây giờ. Sau đây là các Codes-void ... params ý nghĩa trong khai báo hàm java

protected Void doInBackground(String... params) { 
     Log.i(TAG, "doInBackground"); 
     //Invoke web method 'PopulateCountries' with dummy value 
     invokeJSONWS("dummy","PopulateCountries"); 
     return null; 
    } 

và một chức năng tương tự với ... trong tham số

protected void onProgressUpdate(Void... values) { 
     Log.i(TAG, "onProgressUpdate"); 
    } 

không ... có ý nghĩa gì trong bối cảnh sau.

Cảm ơn trước!

+0

có thể trùng lặp của [Dấu ba chấm (...) cho chữ ký của phương thức này là gì?] (Http://stackoverflow.com/questions/2367398/what-is-the-ellipsis-for-in-this- chữ ký phương thức) –

Trả lời

3

Android của AsyncTask là một kiểu generic.

Khi bạn cần một công việc async mà không có cảm giác dữ liệu tiến trình trung gian, bạn nên khai báo nó như MyTask extends AsyncTask<Something, Void, Something> sử dụng lớp Void như đặc điểm kỹ thuật của biến Progress loại, và, sau quy tắc chung thường lệ, nếu bạn quyết định ghi đè onProgressUpdate bạn sẽ phải khai báo nó là onProgressUpdate(Void... values).

Do đó Void... không có nghĩa là bất kỳ điều gì khác với phương pháp vararg thông thường có loại đã xảy ra là Void.

1

là đối số có độ dài thay đổi

3

Có các tham số tùy chọn với Java 5.0. Chỉ cần khai báo chức năng của bạn như sau:

public void doSomething(boolean...optionalFlag) { 
    ... 
} 

bạn có thể gọi với doSomething() hoặc doSomething(true) ngay bây giờ.

Đây là "mới" trong Java 1.5 trở lên (không được hỗ trợ trong Java 1.4 hoặc cũ hơn).

4
type ... variableName 

Các ellipsis (...) xác định một số biến của tham số, và được thể hiện trong phương pháp tổng kết sau.

static int sum (int ... numbers) 
{ 
    int total = 0; 
    for (int i = 0; i < numbers.length; i++) 
     total += numbers [i]; 
    return total; 
} 
9

được gọi là varargs và có nghĩa là số tham số tùy ý cùng loại. Bạn có thể truy cập nó trên mỗi cơ sở chỉ mục, như một mảng.

20

Điều gì có nghĩa là ... trong ngữ cảnh sau.

này quy định biến chiều dài tranh luận khi bạn muốn gọi phương thức với tham số kiểu nói String nhưng bạn không biết có bao nhiêu thông số bạn muốn vượt qua bạn có thể sử dụng này.

vì bạn có thể chuyển số bất kỳ String vào phương thức.

Vì vậy, bạn có thể gọi phương thức như những cách này.

cho

public void met(String...a) 

bạn có thể gọi phương pháp này bằng cách

ob.met() 
ob.met("a") 
ob.met("a","b") 

và vân vân.

Bạn có thể đọc thêm về nó HERE.

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