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

假设我有一个方法m(),它接受一个字符串数组作为参数。有没有办法在调用时直接声明这个数组?即,而不是:

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

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

419911 次浏览
m(new String[]{"blah", "hey", "yo"});

Draemon是正确的。您也可以将m声明为瓦拉格斯

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

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

例如,我经常创建这样的菜单:

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

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

我可以通过方法命名约定将它绑定到menuHandler类,方法命名为“menuFile, menuFileSave, menuFileLoad,…”并反射地绑定它们(还有其他替代方案)。

这种语法允许非常简单的菜单定义和一个非常可重用的“initMenus”方法(但我不想重复使用它,因为它总是很有趣,只需要几分钟+几行代码)。

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

正如Draemon所说,Java最接近内联数组的是new String[]{"blah", "hey", "yo"},但是有一个巧妙的技巧可以让您执行以下操作

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

我一直在开发一个有用的API,用于增强Java语言以允许内联数组和集合类型。有关详细信息,请参阅Google Project Espresso4J或查看这里

另一种方法是,如果你想让结果作为一个列表内联,你可以这样做:

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

你可以在某处创建一个方法

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

那就用它

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

为了更好看。

您可以直接在现代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的开发人员将允许在未来中进行隐式初始化

更新:静态编程语言

静态编程语言使用数组轻松多了!对于大多数类型,只需使用arrayOf,它将隐式确定类型。不传递任何内容以将它们留空。

arrayOf("1", "2", "3") // String
arrayOf(1, 2, 3)       // Int
arrayOf(1, 2, "foo")   // Any
arrayOf<Int>(1, 2, 3)  // Set explict type
arrayOf<String>()      // Empty String array

原语有实用函数。不传递任何东西使它们为空。

intArrayOf(1, 2, 3)
charArrayOf()
booleanArrayOf()
longArrayOf()
shortArrayOf()
byteArrayOf()

如果您已经有一个Collection并希望将其转换为内联数组,只需使用:

collection.toTypedArray()

如果你需要强制一个数组类型,使用:

array.toIntArray()
array.toLongArray()
array.toCharArray()
...

另一种选择是在org.apache.commons.lang3中使用ArrayUtils.to数组

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