2010-08-26 23 views

Trả lời

4

Chắc chắn, bạn sẽ có thể làm một cách chính xác rằng việc sử dụng vararg-methods. Nếu bạn đang lo lắng về sự mơ hồ khi nói đến lập luận như Object... đoạn mã này nên làm rõ:

public class Test { 

    public static void varargMethod(Object... args) { 
     System.out.println("Arguments:"); 
     for (Object s : args) System.out.println(s); 
    } 

    public static void main(String[] args) throws Exception { 
     varargMethod("Hello", "World", "!"); 

     String[] someArgs = { "Lorem", "ipsum", "dolor", "sit" }; 

     // Eclipse warns: 
     // The argument of type String[] should explicitly be cast to Object[] 
     // for the invocation of the varargs method varargMethod(Object...) 
     // from type Test. It could alternatively be cast to Object for a 
     // varargs invocation 
     varargMethod(someArgs); 

     // Calls the vararg method with multiple arguments 
     // (the objects in the array). 
     varargMethod((Object[]) someArgs); 

     // Calls the vararg method with a single argument (the object array) 
     varargMethod((Object) someArgs); 
    } 
} 

Output:

Arguments: 
    Hello 
    World 
    ! 
Arguments: 
    Lorem 
    ipsum 
    dolor 
    sit 
Arguments: 
    Lorem 
    ipsum 
    dolor 
    sit 
Arguments: 
    [Ljava.lang.String;@1d9f953d 

Bạn không thể làm điều đó cho một phương pháp không vararg. Tuy nhiên, một phương pháp phi vararg có một số cố định của các đối số, vì vậy bạn sẽ có thể làm

nonVarargMethod(args[0], args[1], args[2]); 

Hơn nữa, không có cách nào để cho trình biên dịch giải quyết tình hình cho các phương pháp quá tải dựa trên kích thước hoặc loại mảng.

1

Có hai cách để sử dụng varargs trong java

public static void main(String... args) 

Hoặc

Trong ví dụ của tôi nó với chuỗi, nhưng bạn có thể làm điều đó với int quá.

Để gọi cho họ (chỉ hoạt động này trên cả hai),

main("hello", "world"); 

hoặc

main(new String[]{"hello", "world"}); 
+0

Điều này có thể không thực sự là những gì các OP là yêu cầu cho - nó có vẻ như họ đang yêu cầu nếu họ có thể vượt qua một loạt các đối số cho hàm phi vararg. – Amber

+0

Thật vậy - nó trái ngược với varargs. OP muốn gọi phương thức đối số phi mảng với một mảng làm đối số của nó. – gustafc

+0

Ah, tôi chỉ nhận ra rằng mảng không phải là đối tượng trong java, do đó, không có sự mơ hồ nếu bạn chỉ vượt qua một đối số. Cảm ơn bạn! :) – mik01aj

4

Phương thức có thể được khai báo với tham số varargs và được gọi với một mảng, như được gợi ý bởi các câu trả lời khác.

Nếu phương pháp mà bạn muốn gọi không có tham số varargs, bạn có thể làm một cái gì đó như thế này với mẫn, mặc dù đó là một chút vụng về:

class MyClass { 
    public void myMethod(int arg1, String arg2, Object arg3) { 
    // ...code goes here... 
    } 
} 

Class<MyClass> clazz = MyClass.class; 
Method method = clazz.getMethod("myMethod", Integer.TYPE, String.class, Object.class); 

MyClass instance = new MyClass(); 
Object[] args = { Integer.valueOf(42), "Hello World", new AnyObjectYouLike() }; 
method.invoke(instance, args); 
0

Ở đây chúng ta đã trôi qua arguemnts phương pháp tại gọi phương thức, xem ví dụ dưới đây,

check the source

Mô tả ví dụ nằm dưới;

Ở đó, chúng tôi có biến int với giá trị 10, đây là biến cục bộ của phương thức. Sau đó, chúng ta gọi phương thức m (int x) bên trong câu lệnh in. sau đó trong m (int x) có một tham số int x biến, x này cũng là một phương pháp biến địa phương. Bạn chỉ có thể truy cập nó trong phương thức này. Sau đó, bên trong phương thức bạn in giá trị của x, là 10, bởi vì tại phương thức gọi một đối số được truyền y, giữ giá trị 10. giá trị 10 được gán cho phương thức của biến cục bộ x, được khai báo bên trong tham số phương thức.Bây giờ khi chúng ta gọi in x nó sẽ in 10.

Sau đó tạo một biến phương thức cục bộ khác và thêm một số giá trị vào giá trị x và gán và trả về biến đó. Bạn đang trả về một giá trị, vì vậy bây giờ bạn sẽ kiểm tra xem phương thức đó không có giá trị không, và có kiểu trả về int, vì 10 trong một int.

Vì phương pháp của bạn được viết bên trong bản in. giá trị trả lại của bạn cũng được in tại chương trình này. Vì vậy, dưới đây là mã.

class A 
{ 
    static int m(int x) 
    { 
      System.out.println("x : "+x); 
      int a= x+10; 
      System.out.println("a : "+a); 
      return a; 
    } 


    public static void main(String args[]) 
    { 
     int y=10; 
     System.out.println(m(y)); 
    } 
} 

Output:

x : 10 
a: 20 
20 
Các vấn đề liên quan