在python中,我可以这样做:
args = [1,2,3,4]
f(*args) # this calls f(1,2,3,4)
这在java中是否可行?
澄清 - f有一个可变长度的参数列表。
答案 0 :(得分:4)
当然,你应该能够使用vararg-methods做到这一点。如果你担心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]);
此外,根据数组的大小或类型,无法让编译器解决重载方法的情况。
答案 1 :(得分:4)
可以使用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);
答案 2 :(得分:1)
在java中使用varargs有两种方法
public static void main(String... args)
或者
public static void main(String[] args)
在我的例子中,它是字符串,但你也可以使用int。
要调用它们(这适用于两者),
main("hello", "world");
或
main(new String[]{"hello", "world"});
答案 3 :(得分:0)
这里我们已经将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