Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在线声明数组?_Java_Arrays - Fatal编程技术网

Java 有没有办法在线声明数组?

Java 有没有办法在线声明数组?,java,arrays,Java,Arrays,假设我有一个方法m(),它将字符串数组作为参数。有没有一种方法可以让我在调用时直接声明这个数组?i、 e.而不是: String[] strs = {"blah", "hey", "yo"}; m(strs); 我可以用一行替换它,避免声明一个我永远不会使用的命名变量吗?Draemon是正确的。您还可以将m声明为: m(new String[]{"blah", "hey", "yo"}); 我想补充一点,数组初始化语法非常简洁灵活。我经常使用它从代码中提取数据,并将其放在更有用的地方 例如,

假设我有一个方法m(),它将字符串数组作为参数。有没有一种方法可以让我在调用时直接声明这个数组?i、 e.而不是:

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

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

Draemon是正确的。您还可以将
m
声明为:

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

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

例如,我经常创建如下菜单:

Menu menu=initMenus(menuHandler, new String[]{"File", "+Save", "+Load", "Edit", "+Copy", ...});
Arrays.asList(new String[] { "String1", "string2" });
这将允许我编写come代码来设置菜单系统。“+”足以告诉它将该项放在前一项下

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

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


每当您在代码中看到一个模式时,请查看是否可以将其替换为类似的内容,并始终记住数组初始化语法是多么简洁

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

数组(“blah”、“hey”、“yo”)
自动推断类型


我一直在开发一个有用的API,用于扩展Java语言,以允许内联数组和集合类型。如需有关google project Espresso4J的更多详细信息,或通过另一种方式查看它,如果您希望结果以列表形式内联显示,您可以这样做:

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

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

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

为了获得更好的外观。

您可以直接用现代Java编写数组,而无需初始值设定项。你的例子现在有效了。通常最好还是命名参数

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

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

functionCall(new String[]{"blah", "hey", "yo"});
或者使用varargs(变量参数)

希望Java的开发人员将来能够允许隐式初始化

更新:Kotlin回答 Kotlin使使用阵列变得更加容易!对于大多数类型,只需使用
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.toTypedArray()
如果需要强制数组类型,请使用:

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

另一个选项是在org.apache.commons.lang3中使用ArrayUtils.toArray

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


仅供将来参考,这种类型的数组称为匿名数组(因为它没有名称)。搜索“匿名数组java”会产生一些结果。它类似于强制转换。我想这就是我的想法,所以我不必千载难逢地用谷歌搜索它,我需要这样做。这是一个罕见的情况,只有代码的答案是完全可以接受的,事实上,也许更可取。@Falaina数组没有其他类型(匿名)只是因为引用没有存储在立即作用域的变量中。数组仍然具有对象标识,其引用已传递并绑定到方法param。从未听说过将对象称为匿名对象。我看不到与匿名类的比较,匿名类有一个没有名字的新类定义。对于旧的post回复很抱歉,查找有关支持重分解的post ValhallaAn IDE的潜在内联数组的信息将允许您自动内联STR。非常好的语法,但是使用此方法,您只能有一个数组参数,并且必须是最后一个。所以,您不能这样做:
void m(String…strs,Integer…intgrs)
例如,blefoot是正确的。但是你可以做
void m(整数i,双d,字符串…str)
@MichaelMyers
(字符串…strs)
@kasuniyambalapitiya:点击我答案中的链接。这里有几个问题:1。请确保在您的帖子和个人资料中充分说明您与Espresso4J(请参阅我们的)2有关联。请小心在相当旧的帖子(特别是像这篇和这篇这样的模板答案)上发布到你自己网站的链接-它被认为是非常垃圾的,并且会引起标志,这将削弱你的代表@Kev-ah抱歉。我已经澄清,我现在是精品浓缩咖啡4J项目的开发者:)这也比Varags做的更好。此外,任何喜欢为“好玩”而输入代码的人都应该投反对票!编码是解决新问题,而不是打字。哦,等等,这是Java;-)你是对的,当我写这篇文章时,我并没有太多地使用varargs——在java中存在varargs之前,我使用了相当多的数组初始化。我仍然更喜欢数组的一个部分是,如果将其定义为aray,则可以在文件顶部将其设置为常量,而不是内联数据,并且还可以将其提取到配置文件中,8年后,我不得不说,我现在发现自己使用注释来完成几乎所有我使用初始化字符串数组所做的事情。实际上,你不需要创建数组,你只需要做:
arrays.asList(“string1”、“string2”…)
可能有用的一点是:你不能用原语来做这件事。您将得到一个元素
列表
,它的类型为[],其中
类型
是原语。e、 g.
Arrays.asList([some int])
生成一个
列表
@Antonio Carlos:不,不是。您可以在返回的
列表上调用
set
,它将修改数组。但是您不能执行
doSomething({“blah”、“hey”、“yo”})
,这就是原始问题所要问的。它是一种替代方法,但是它有额外的函数调用添加到堆栈中,这是不必要的
array.toIntArray()
array.toLongArray()
array.toCharArray()
...
ArrayUtils.toArray("elem1","elem2")