2010-02-25 40 views
93

Có thể khai báo phương thức cho phép số lượng tham số thay đổi?Số biến hoặc đối số Java cho phương thức

Biểu tượng được sử dụng trong định nghĩa chỉ ra rằng phương pháp nên cho phép một số biến số tham số?

Trả lời: varargs

+7

Vì bài tập về nhà, chúng tôi không muốn biết câu hỏi của bạn, chúng tôi chỉ muốn biết bạn đang học. – HDave

Trả lời

205

Đó là chính xác. Bạn có thể tìm hiểu thêm về nó trong the Oracle guide on varargs.

Dưới đây là một ví dụ:

void foo(String... args) { 
    for (String arg : args) { 
     System.out.println(arg); 
    } 
} 

mà 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. 
+1

Có thể thực hiện nhiều loại paramter khác nhau không? ví dụ. (Chuỗi ... strs, int ... ints). Điều gì về chỉ là bất kỳ loại đối số theo thứ tự nào? – trusktr

+4

@trusktr: nếu bạn muốn bất kỳ đối tượng nào, chỉ cần sử dụng 'Object ...'. – BalusC

+1

Điều đó có hoạt động với các nguyên thủy không? – trusktr

11

Vâng, nó có thể:

public void myMethod(int...numbers) { ... } 
10
Variable number of arguments 

Có thể chuyển một số biến đối số cho một phương thức. Tuy nhiên, có một số hạn chế:

  • Số biến các thông số phải tất cả có cùng loại
  • Họ được coi là một mảng trong phương pháp
  • Họ phải là thông số cuối cùng của phương pháp

để hiểu những hạn chế này, hãy xem xét phương pháp, trong đoạn mã sau đây, được sử dụng để trả lại số nguyên lớn nhất trong một 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 Programmer Study Guide 2012

2

Nếu bạn có thể sử dụng các loại khác nhau của các đối số, sau đó sử dụng:

public void foo(Object... x) { 
    String first = x.length > 0 ? (String)x[0] : "Hello"; 
    int duration = x.length > 1 ? Integer.parseInt((String) x[1])  : 888; 
} 
foo("Hii",); 
foo("Hii", 146); 

cho an ninh, 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 tham số tùy chọn thuộc các kiểu khác nhau, bạn sẽ mất kiểm tra kiểu tĩnh. Vui lòng xem more variations.

0

Có Java cho phép varg trong tham số phương pháp.

class  Varargs{public int add(int... numbers){ int result = 1; for(int number: numbers){result= result+numbers;  }  return result; }} 
+0

Vui lòng không sử dụng liên kết để cung cấp câu trả lời. Liên kết có thể chết nhưng nếu bạn bao gồm câu trả lời thực tế trong bài viết của bạn, nó sẽ được tìm kiếm cho các thế hệ tương lai, trong trường hợp ai đó có cùng một vấn đề. – Moseleyi

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