gpt4 book ai didi

Java泛型问题

转载 作者:行者123 更新时间:2023-12-04 06:49:38 24 4
gpt4 key购买 nike

试图泛型化一些遗留代码,我被卡住了。我有一个 ParentObject,它包装一个 ChildObject 以在 ChildObject 上提供组类型的操作。最有用的是,它允许迭代子对象的集合。
当我尝试将一些泛型添加到混合中时,我无法弄清楚如何使它与迭代器方法友好地运行而不会出现“命名冲突”错误,或者在下面的示例中,“返回类型与Iterable.iterator()”错误。
有什么建议? (额外的问题 - 除了抑制警告之外,是否有更好的方法来编写避免 getChildObjectByIndex() 方法来避免类型删除编译器警告?)
非常感谢您的帮助

public class ParentObject implements Iterable<ChildObject> {  
protected List<? super ChildObject> theChildObjects;

@SuppressWarnings("unchecked")
public <T extends ChildObject> T getChildObjectByIndex(int idx) {
return (T)theChildObjects.get(idx);
}

public Iterator<? super ChildObject> iterator() {
return java.util.Collections.unmodifiableCollection(this.theChildObjects).iterator();
}

}

最佳答案

如果 ParentObject 只包含 ChildObject 的一个子类型,您可以在该类型上参数化 ParentObject:

public class ParentObject<T extends ChildObject> implements Iterable<T> {
protected List<T> theChildObjects;

public T getChildObjectByIndex(int idx) {
return theChildObjects.get(idx);
}

public Iterator<T> iterator() {
return java.util.Collections.unmodifiableCollection(this.theChildObjects).iterator();
}
}

关于Java泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310659/

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