gpt4 book ai didi

java - 通用数组创建与 Array.newInstance()

转载 作者:行者123 更新时间:2023-12-01 16:01:36 25 4
gpt4 key购买 nike

我正在编写一个有两个 ArrayList 的类字段。一种是用于包含自定义对象。另一个用于包含自定义集合对象(也可能具有这些字段):

private ArrayList<SomeClass> myObjList;                  // Just objects
private ArrayList<SomeCollectionClass> myCollectionList; // Collections of objects

为了落实Collection<E>界面,我写了一个iterator()方法:

public Iterator<SomeClass> iterator() { ... }

但作为一种方便的方法,我也开始编写一个 deepIterator() 来返回 Iterators对于 myCollectionList 中的每个集合- Iterators 的集合- 事情很快就变得非常困惑:

public Iterator<SomeClass>[] deepIterator() {
int numIterators = this.myCollectionList.size();
Iterator<SomeClass>[] iters = (Iterator<SomeClass>[]) new Iterator<SomeClass>[numIterators]; // not allowed
for (int i = 0; i <= numIterators; i++) {
iters[i] = this.myCollectionList.get(i).iterator();
}
return iters;
}

并且编译器抛出 "generic array creation"错误。我明白为什么会发生这种情况,但我不明白的是为什么:

    public Iterator<SomeClass>[] deepIterator() {
int numIterators = this.myCollectionList.size();
Iterator<SomeClass>[] iters = (Iterator<SomeClass>[])(Array.newInstance(Iterator.class, numIterators)); // allowed
for (int i = 0; i <= numIterators; i++) {
iters[i] = this.myCollectionList.get(i).iterator();
}
return iters;
}

编译得很好。谁能解释一下吗?我并不真正关心 array[] 的优点与一些Collection<E>类( ArrayList 或者你有什么)作为返回类型,我只是对那个声明/实例化/初始化行感到困惑。提前致谢!

最佳答案

如果您像这样声明第二个项目会有帮助吗?

private ArrayList<Collection<SomeClass>> myCollectionList;

处理数组和迭代器看起来像是 a$$ 中的一个痛苦。我之前已经使用像这样的泛型将集合嵌套在集合中,并且效果很好。然后,我只需使用普通的集合 API 调用,在嵌套的 for 循环中对其进行迭代。

关于java - 通用数组创建与 Array.newInstance(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3731612/

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