2010-03-01 58 views
31

虽然我在尝试for循环中的一些特殊功能,但我认识到Java似乎不喜欢将匿名数组作为for-each-loop的源:Java:每个循环中的“匿名”数组

for (String crt : {"a","b","c"}) { 
    doSomething(); 
} 

String[] arr = {"a","b","c"}; 
for (String crt : arr) { 
    doSomething(); 
} 

并不实际不起作用。

即使将数组转换为String []也没有帮助。将光标移动到第一个版本时,eclipse告诉我:

Type mismatch: cannot convert from String[] to String while while meaning“crt”。

这是一个错误?

+2

关于“这是一个错误?”:http://www.catb.org/~esr/faqs/smart-questions.html#id382249 – 2010-03-01 20:32:56

+2

我实际上没有**声称**有**找到**一个错误。我只是问**它是否可能是一个错误。奇怪的是,在一个部分中,这种类型的表达起作用,而在另一部分中则不起作用。在我眼中不太一致。 – Atmocreations 2010-03-01 20:48:00

+0

作为记录,@JoachimSauer指的是_Don't不要急于声称你发现了一个bug ._最新的URL是http://www.catb.org/~esr/faqs/smart -questions.html#idp5122192 – 2013-07-08 13:21:35

回答

60

这将工作:

for (String crt : new String[]{"a","b","c"}) { 
    doSomething(); 
} 
3

不知道,这个怎么样? :)可惜没有简洁的版本。假设你可以使用Groovy或斯卡拉如果你想类似的东西:)

for (String s : Arrays.asList("a","b","c")) { 
    hmm(s); 
} 
+0

听起来有点像C#:P – Atmocreations 2010-03-01 20:47:08

2

你想

for (String crt : new String [] {"a","b","c"}) { 
    doSomething(); 
} 

我用的IntelliJ和它说把“表达有望”在右侧的消息for循环中的冒号,这似乎更准确。

我应该补充一点,IntelliJ还提供了为我自动添加“新字符串[]”的功能。

18

Java语言提供{"a","b","c"}表单作为快捷方式,但只能在分配过程中进行。这可能是为了避免解析时可能出现的歧义,在某些位置{}可能会被解释为代码块。

做到这一点的正确方法是挪亚建议,new String[]{"a","b","c"}

+5

请注意,所有作业都不允许使用缩写形式。它仅在初始化时才被允许。 – 2010-03-01 20:54:39

+0

@Joachim:有趣的事实。这几乎解决了我的问题,谢谢指出。 @Tom城堡:+1好答案 – Atmocreations 2010-03-01 20:58:48