Khi lập trình cho Android, bất cứ khi nào tôi sử dụng AsyncTask, phương thức doInBackground trông như thế này.
protected String doInBackground(String... args)
Nhưng khi sử dụng các đối số ở bất cứ đâu trong khối đó, tôi có thể truy cập chúng như một mảng Chuỗi bình thường, ví dụ như trong chương trình của tôi
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
Mà hoạt động tốt và tôi không có vấn đề đối phó với nó. Nhưng tôi tự hỏi tại sao họ sử dụng (Chuỗi .. Args) thay vì một chuỗi bình thường. Có phải chỉ vì trong phương thức gọi, bạn có thể viết một cái gì đó như:
new AsyncHandler.execute("argument1","argument2","argument3",...)
thay vì tạo một mảng mới để vượt qua các đối số? Mặc dù chúng tôi có thể viết
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
đó là một chút dài dòng hơn.
Có phải (Chuỗi ...) và Chuỗi [] đồng nghĩa với cách chúng hoạt động, nhưng việc truyền đối số chỉ dễ dàng hơn khi sử dụng trước vì không cần phải tạo một mảng? Theo như tôi có thể nói, trước đây cũng được dịch sang một chuỗi chuỗi trong nền để cả hai cùng biên dịch thành cùng một mã và đó chỉ là 'đường cú pháp'?
String...
như thể đó làString[]
String[]
, nhưng giả sử nó là mặc định String[]
. Việc sử dụng các thông số khác nhau String
trong một mảng sẽ là một vấn đề . Thay vào đó họ đã cho một sự linh hoạt để sử dụng (String ...)
.
new String[]{...}
để chuyển đổi (đó là những gì thực sự xảy ra khi bạn sử dụng a String...
)
(String ...)
có nghĩa là bạn có thể thêm nhiềuString
param như bạn muốn,String[]
là một tham số là một chuỗi các chuỗi.(String ...)
phụ thuộc vào thông số đầu tiênAsyncTask
, không phải lúc nào cũng vậyString
.