gpt4 book ai didi

java - 有没有我可以在 Java 中使用的参数,它适用于所有 for-each 循环?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:03 25 4
gpt4 key购买 nike

假设我有一个方法接受数组并使用 Java 内置的 for-each loop 处理其中的每个元素,像这样:

public static void myFun(SomeClass[] arr) {
for (SomeClass sc : arr) {
// Stuff is processed here
}
}

这工作得很好,但现在我希望能够将相同的方法传递给 List<SomeClass>反而。我注定要使用 Collection.toArray(T []) ,或者是否有我可以用于 myFun() 的参数接受可以在 for-each 构造中使用的任何类型?

澄清一下:我想要一个可以接受任何可迭代对象的方法签名,无论是原始数组还是集合。我可以非常轻松地编写两个方法,一个包装另一个,但我只是想知道是否有更好的方法。

最佳答案

我建议使用IterableCollectionList 作为参数类型。

IMO,集合应该优先于引用数组。如果您碰巧有一个数组 Arrays.asList 可以很好地进行转换。 Arrays.asList 允许 gets 和 sets 回到数组,但显然不是会改变数组长度的“结构”修改。

myFun(Arrays.asList(arr));

在极端/一般情况下,您可能必须使用通配符。

public static void myFun(Iterable<? extends SomeClass> somethings) {
for (SomeClass something : somethings) {
// something is processed here
}
}

值得注意的是 Collections.toArrayArrays.asList 的工作方式略有不同。 asList 保留原始数组以支持集合,因此对集合的更改将反射(reflect)在数组中。 Collections.toArray 生成集合数据的(浅)副本。如果要返回数组,制作副本通常是您想要的。不对称地,如果您作为参数传递,您通常不会复制(除非存储为字段)。

关于java - 有没有我可以在 Java 中使用的参数,它适用于所有 for-each 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com