1

给定一个方法,例如:

public void blit(int[] pos) {
   do stuff..
}

有没有办法在不首先声明它们的情况下传递参数列表?

例如,在 Python 中,我可以执行以下操作:

def blit(pos):
   stuf...

blit([20,50])

我可以简单地传入一个在参数列表中专门创建的列表。要在 Java 中做同样的事情,似乎我必须先声明数组,然后才能将它传递给方法。

int[] coordinates = {20,50};
blit(coordinates);

这不是什么大不了的事,但如果我能做类似的事情会很方便,

blit({20,50});

但这当然行不通。我也尝试过在调用中创建数组,例如,

blit(new int[] = {20,40});

但同样,没有运气。所以,也许是一个可怕的问题,但是有没有办法将参数列表传递给一个部分模仿 Python 行为的方法?

4

9 回答 9

7

你可以通过两种方式做到这一点:

blit(new int[] {20,40});

或者用可变参数声明你的方法:

public void blit(int... pos) {}

并这样称呼它:

blit(20, 40);
于 2012-09-06T17:35:48.027 回答
2

你很接近:

blit(new int[] {20,40});
于 2012-09-06T17:34:44.933 回答
2

我认为您的意思是匿名数组创建:

blit(new int[] {20, 40});

我对么?

于 2012-09-06T17:34:49.927 回答
1

是的,使用可变数量的参数语法:

public void blit(Object ... args)
{
}

blit(10, 20, 30);

如果你想传递同质参数,那么 aList<type>应该是首选。

于 2012-09-06T17:34:57.837 回答
0

使用此语法:

blit(new int[]{20, 40});
于 2012-09-06T17:34:58.323 回答
0

你可以做类似的事情

  blit(new int[]{5,10});
于 2012-09-06T17:35:01.390 回答
0

你为什么不使用List.......

blit(new List<Integer>());

于 2012-09-06T17:37:19.010 回答
0

您可以将 ajava.util.Map<String,Object>作为方法的唯一参数。(使用键=参数名称)

java.util.Map<String,Object> arguments=new HashMap<String,Object>();
List<Integer> positions=new ArrayList<Integer>();
positions.add(1);
positions.add(2);
arguments.put("pos",positions);

myfunction_call(arguments);
于 2012-09-06T17:37:43.187 回答
0

称它为blit(new int[]{20,40});

对于引用类型,您可以声明方法 whis varargs:

 public void blit(Integer... pos) {
    //do stuff..
 }
 // and the array creation code will be inserted by the compiler:
 blit(20,40);
于 2012-09-06T17:42:54.060 回答