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

时间:2009-07-20 14:44:51

标签: java arrays

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

String[] strs = {"blah", "hey", "yo"};
m(strs);

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

8 个答案:

答案 0 :(得分:855)

m(new String[]{"blah", "hey", "yo"});

答案 1 :(得分:107)

守护进程是正确的。您也可以将m声明为varargs

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

答案 2 :(得分:29)

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

Arrays.asList(new String[] { "String1", "string2" });

答案 3 :(得分:12)

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

String[] array = {"blah", "hey", "yo"};

int[] array = {1, 2, 3};

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

functionCall(new String[]{"blah", "hey", "yo"});

或使用varargs(变量参数)

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

functionCall("blah", "hey", "yo");

希望Java的开发人员允许在 future

中进行隐式初始化

答案 4 :(得分:9)

您可以在某处创建方法

public static <T> T[] toArray(T... ts) {
    return ts;
}

然后使用它

m(toArray("blah", "hey", "yo"));

为了更好看。

答案 5 :(得分:4)

我想补充一点,数组初始化语法非常简洁灵活。我用它很多来从我的代码中提取数据并将它放在更有用的地方。

举个例子,我经常创建这样的菜单:

Menu menu=initMenus(menuHandler, new String[]{"File", "+Save", "+Load", "Edit", "+Copy", ...});

这将允许我编写来代码来设置菜单系统。 “+”足以告诉它将该项目置于上一项目之下。

我可以通过方法命名约定将它绑定到menuHandler类,方法是命名我的方法,例如“menuFile,menuFileSave,menuFileLoad,...”并反射绑定它们(还有其他选择)。

此语法允许令人惊讶的简短菜单定义和极其可重用的“initMenus”方法。 (但我不打算重复使用它,因为编写它总是很有趣,只需几分钟+几行代码)。

任何时候你在代码中看到一个模式,看看你是否可以用这样的东西替换它,并且永远记住数组初始化语法是多么简洁!。

答案 6 :(得分:2)

正如Draemon所说,Java最接近内联数组的是new String[]{"blah", "hey", "yo"}但是有一个巧妙的技巧可以让你做类似的事情

array("blah", "hey", "yo")自动推断类型。

我一直在研究一种有用的API,用于扩充Java语言以允许内联数组和集合类型。有关详细信息,请参阅Google项目Espresso4J或查看here

答案 7 :(得分:1)

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

ArrayUtils.toArray("elem1","elem2")