Hai câu hỏi về cú pháp Java trong Android

Anh chị cho em hỏi ví dụ

private class CongViec extends AsyncTask<Void,String,String> {
   protected String doInBackground(String...strings) {
       return null;
   }
}

Mình có 2 câu hỏi:

  • Các đối số hay tham số trong class CongViec<Void, String,String> là gì? kiểu tham số hay các đối số trong các hàm?
  • String...strings là gì?

Mong các bạn giải thích cụ thể?

Nó gần giống với

protected String doInBackground(String[] strings) {
return null;
}

Khi đó (biến tham số) strings là một mảng
Bạn có thể hoàn toàn sử dụng nó như là một mảng.

protected String doInBackground(String...strings) {
for(int i = 0; i < strings.length();i++){
System.out.println(string[i]);
}
return null;
}

Tuy nhiên cách gọi lại không giống lắm, chính xác là Dùng String… sẽ có các gọi “dễ dãi” hơn.

// Không giới hạn số tham số có cùng kiểu
doInBackground("a","b","c");
doInBackground("a","b","c","d","e");
// Hoặc truyền cả mảng:
String a = new String[]{"a","b","c","d","e"};
doInBackground(a);

Điều chú ý là khi khai báo hàm, tham số kiểu này chỉ xuất hiện duy nhất 1 lần và phải nằm cuối cùng.

// Đúng
protected String doInBackground(String...strings)
protected String doInBackground(int x, bool t, String...strings)
// Sai
protected String doInBackground(String...strings, String...x, int...k )
protected String doInBackground(String...strings, int x, bool t)

<Void, String,String> là Kiểu chung **Generic Types** Các Void và String là tham số kiểu được truyền vào
2 Likes

Bác ở trên trả lời tương đối đầy đủ rồi, mình chỉ thả bạn cái keyword để tìm hiểu thêm: varargs in Java

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?