[英]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.