【发布时间】:2010-11-12 16:53:41
【问题描述】:
使用 Java5 我们可以编写:
Foo[] foos = ...
for (Foo foo : foos)
或者只是在 for 循环中使用 Iterable。这非常方便。
但是,您不能像这样为可迭代编写通用方法:
public void bar(Iterable<Foo> foos) { .. }
并用数组调用它,因为它不是 Iterable:
Foo[] foos = { .. };
bar(foos); // compile time error
我想知道这个设计决定背后的原因。
【问题讨论】:
-
Arrays.asList 我想已经足够好了
-
这是一个哲学问题
-
在 Java 5+ 中处理数组的一个很好的理由是可变参数方法。
-
@Torsten:是的,但如果你将它传递给一个接受 Iterable 的方法,你可能不会做任何改变。
-
实际上,Arrays.asList 不够好,因为它不适用于原始类型的数组。通用迭代(装箱)原始类型元素的唯一内置方法是使用反射,使用
java.lang.reflect.Array,但它的性能很弱。但是,如果需要,您可以编写自己的迭代器(或 List 实现!)来包装原始类型的数组。
标签: java language-design