有什么方法可以在线声明一个数组?

Div*_*ero 583 java arrays

假设我有一个方法m(),它将一个字符串数组作为参数.有没有办法在拨打电话时能够在线声明这个数组?即代替:

String[] strs = {"blah", "hey", "yo"};
m(strs);
Run Code Online (Sandbox Code Playgroud)

我可以用一行替换它,并避免声明一个我永远不会使用的命名变量吗?

Dra*_*mon 902

m(new String[]{"blah", "hey", "yo"});
Run Code Online (Sandbox Code Playgroud)

  • 仅供将来参考,这种类型的数组称为匿名数组(因为它没有名称).搜索"匿名数组java"会产生一些结果. (73认同)
  • 它类似于铸造。我认为这就是我的想法,所以我不必在蓝月中谷歌一次我需要这样做。 (3认同)
  • 这是极少数情况下,纯代码答案是完全可以接受的,事实上,甚至可能更好。 (3认同)

Mic*_*ers 109

守护进程是正确的.您也可以声明mvarargs:

void m(String... strs) {
    // strs is seen as a normal String[] inside the method
}

m("blah", "hey", "yo"); // no [] or {} needed; each string is a separate arg here
Run Code Online (Sandbox Code Playgroud)

  • 非常好的语法,但使用此方法,您只能有一个数组参数,它必须是最后一个.所以,你不能这样做:`void m(String ... strs,Integer ... intgrs)`例如. (17认同)
  • blefoot是对的.但你可以做`void m(Integer i,Double d,String ... str)` (5认同)
  • @KasunSiyambalapitiya:单击我的答案中的链接。 (2认同)

Ant*_*los 30

另一种方法是,如果你想把结果作为List inline,你可以这样做:

Arrays.asList(new String[] { "String1", "string2" });
Run Code Online (Sandbox Code Playgroud)

  • 你实际上不需要创建一个数组,你可以简单地做:`Arrays.asList("string1","string2",...)` (35认同)
  • 是啊!= D只是为了记住,以这种方式创建的数组是不可变的. (2认同)
  • 可能有用的一点:你不能用原语来做这件事.你最终会得到一个单元素`List`的`type []`,其中`type`就是那个原语.例如`Arrays.asList([some ints])`导致`List <int []>`. (2认同)

Gib*_*olt 17

您可以直接在现代Java中编写数组,而无需使用初始化程序.您的示例现在有效.通常最好为参数命名.

String[] array = {"blah", "hey", "yo"};
Run Code Online (Sandbox Code Playgroud)

要么

int[] array = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

如果必须内联,则需要声明类型:

functionCall(new String[]{"blah", "hey", "yo"});
Run Code Online (Sandbox Code Playgroud)

或使用varargs(变量参数)

void functionCall(String...stringArray) {
    // Becomes a String[] containing any number of items or empty
}

functionCall("blah", "hey", "yo");
Run Code Online (Sandbox Code Playgroud)

但愿Java的开发人员将能够在隐式初始化未来


Mah*_*oya 9

您可以在某处创建方法

public static <T> T[] toArray(T... ts) {
    return ts;
}
Run Code Online (Sandbox Code Playgroud)

然后使用它

m(toArray("blah", "hey", "yo"));
Run Code Online (Sandbox Code Playgroud)

为了更好看.


Shr*_*thy 8

其他选项是在 org.apache.commons.lang3 中使用 ArrayUtils.toArray

ArrayUtils.toArray("elem1","elem2")
Run Code Online (Sandbox Code Playgroud)