簡體   English   中英

如何將args傳遞給java中的方法,比如python中的f(* args)?

[英]How to pass args to method in java, like f(*args) in python?

在python中,我可以這樣做:

args = [1,2,3,4]
f(*args) # this calls f(1,2,3,4)

這在Java中可行嗎?

澄清 - f有一個變長的參數列表。

當然,你應該能夠使用vararg方法做到這一點。 如果您擔心像Object...這樣的參數時會出現歧義Object...這段代碼應該澄清:

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);
    }
}

輸出:

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

不能用非vararg方法。 但是,非vararg方法具有固定數量的參數,因此您應該能夠這樣做

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

此外,沒有辦法讓編譯器根據數組的大小或類型解決重載方法的情況

可以使用varargs參數聲明方法,並使用數組調用該方法,如其他答案所示。

如果你想調用的方法沒有varargs參數,你可以用內省來做這樣的事情,雖然它有點笨重:

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);

在java中使用varargs有兩種方法

public static void main(String... args)

要么

public static void main(String[] args)

在我的例子中,它是字符串,但你也可以使用int。

要打電話給他們(這適用於兩者),

main("hello", "world");

要么

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

這里我們在方法調用中將arguemnts傳遞給方法,參見下面的例子,

檢查來源

該示例的描述如下;

我們有一個值為10的int變量,它是一個方法局部變量。 然后我們在print語句中調用方法m(int x)。 然后在m(int x)中有一個參數int x variable,這個x也是一個方法局部變量。 您只能在此方法中訪問它。 然后在inside方法中打印x的值,即10,因為在方法調用時,參數傳遞y,它保存值10.值10被賦值給方法的方法局部變量x,它在方法參數中聲明。 現在,當我們打電話給打印x時,它將打印10。

然后創建另一個方法局部變量並將一些值添加到x值並分配並返回該變量。 你正在返回一個值,所以現在你將檢查該方法是否為void,並且具有int返回類型,因為在int中為10。

由於您的方法是在print語句中編寫的。 您的返回值也會在此程序中打印出來。 以下是代碼。

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));
    }
}

輸出:

x : 10
a: 20
20

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM