Có thể khai báo một phương thức sẽ cho phép số lượng tham số thay đổi không?
Ký hiệu được sử dụng trong định nghĩa chỉ ra rằng phương thức nào sẽ cho phép số lượng tham số thay đổi?
Trả lời: varargs
Có thể khai báo một phương thức sẽ cho phép số lượng tham số thay đổi không?
Ký hiệu được sử dụng trong định nghĩa chỉ ra rằng phương thức nào sẽ cho phép số lượng tham số thay đổi?
Trả lời: varargs
Câu trả lời:
Đúng rồi. Bạn có thể tìm hiểu thêm về nó trong hướng dẫn của Oracle về varargs .
Đây là một ví dụ:
void foo(String... args) {
for (String arg : args) {
System.out.println(arg);
}
}
có thể được gọi là
foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.
Object...
.
Object... args
sẽ làm việc với nguyên thủy vì autoboxing .
varargs.length
Variable number of arguments
Có thể truyền một số lượng đối số khác nhau cho một phương thức. Tuy nhiên, có một số hạn chế:
Để hiểu các hạn chế này, hãy xem xét phương thức, trong đoạn mã sau, được sử dụng để trả về số nguyên lớn nhất trong danh sách các số nguyên:
private static int largest(int... numbers) {
int currentLargest = numbers[0];
for (int number : numbers) {
if (number > currentLargest) {
currentLargest = number;
}
}
return currentLargest;
}
nguồn Oracle Certified Associate Java SE 7 Hướng dẫn học lập trình 2012
Đối với các loại đối số khác nhau, có 3 dấu chấm :
public void foo(Object... x) {
String myVar1 = x.length > 0 ? (String)x[0] : "Hello";
int myVar2 = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
}
Sau đó gọi nó
foo("Hii");
foo("Hii", 146);
để bảo mật, hãy sử dụng như thế này:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }
Hạn chế chính của phương pháp này là nếu các tham số tùy chọn thuộc các loại khác nhau, bạn sẽ mất kiểm tra kiểu tĩnh. Xin vui lòng, xem thêm các biến thể .
Đúng ... kể từ Java 5: http://java.sun.com/j2se/1.5.0/docs/guide/lingu/varargs.html
Có Java cho phép vargs
trong tham số phương thức.
public class Varargs
{
public int add(int... numbers)
{
int result = 1;
for(int number: numbers)
{
result= result+number;
} return result;
}
}