Java是否为每个循环接受了一般的"可迭代"类型?

use*_*472 4 java

是否存在XXX<T>可以使用for-each迭代并且包含两者的类型T[],Iterable<T>以便以下编译(假设类上下文和兼容方法do_something)?

public void iterate(XXX<T> items)
{
    for (T t : items)
        do_something(t);
}

public void iterate_array(T[] items)
{
    iterate(items);
}

public void iterate_iterable(Iterable<T> items)
{
    iterate(items);
}
Run Code Online (Sandbox Code Playgroud)

在Java 1.5中,我没有发现任何类型.也许在该语言的更高版本中?(我想这可能是一个常见问题解答.如果它是噪音,请注意.快速谷歌搜索没有给出答案.)

ska*_*man 6

简短的回答是:不,没有类型涵盖两者.

简单的解决方案是将数组包装在一个List,然后只需调用它

public void iterate_array(T[] items)
{
    iterate(Arrays.asList(items));
}

public void iterate_array(Iterable<T> items)
{
    for (T t : items)
        do_something(t);    
}
Run Code Online (Sandbox Code Playgroud)

  • @emory:它只是一个包装器对象,对象创建开销在现代JVM中如此便宜,以至于无需担心它.如果那个迭代逻辑长20行怎么办?你还能削减它吗?选择复制代码而不是重构代码是一个糟糕的设计选择. (2认同)