带有类型混淆的自定义Java迭代器
我有一个泛型类,它绑定了一个对象和一个顺序:带有类型混淆的自定义Java迭代器,java,generics,iterator,Java,Generics,Iterator,我有一个泛型类,它绑定了一个对象和一个顺序: public class OrderedObject<T> { private int order; private T object; public OrderedObject(int order, T object) { this.order = order; this.object = object; } public int getOrder() {
public class OrderedObject<T> {
private int order;
private T object;
public OrderedObject(int order, T object) {
this.order = order;
this.object = object;
}
public int getOrder() {
return order;
}
public T getObject() {
return object;
}
}
后一个类不会编译,因为在
for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {
for(Iterator it=s.Iterator();it.hasNext();){
我忽略了什么?混淆是因为内部类
OrderedObjectSetIterator
引入了一个泛型类型,称为与外部类相同的(T
)。Eclipse IDE显示了一个警告:
The type parameter T is hiding the type T
所以我想您不需要引入其他参数类型,只需使用与外部类定义相同的参数类型
基本上,内部类将被定义为:
private class OrderedObjectSetIterator implements Iterator<T> {
....
私有类OrderedObjectSetIterator实现迭代器{
....
迭代器方法如下所示:
public Iterator<T> iterator() {
return new OrderedObjectSetIterator();
}
公共迭代器迭代器(){
返回新的OrderedObjectSetIterator();
}
您知道TreeSet
,对吗?嗯……向OrderedObjectSetIterator添加公共无参数构造函数可以解决问题吗?当我没有看到任何显式构造函数时,我会产生怀疑。无论如何,我手边没有编译器,但是如果将内部类定义为私有类OrderedObjectSetIterator实现,会发生什么ts迭代器
?我认为,T
可能会在那里被重新定义。要扩展mmyers的评论,如果您使用TreeSet并定义compareTo()通过OrderedObject使用order字段,您可以免费获得效率更高的迭代器……而且不必编写所有可能的错误代码。这正是问题所在。我不需要其他参数类型。谢谢。已解决。我觉得建议的TreeSet方法是更优雅的应用解决方案。尽管如此,我还是很高兴我这么做了通过试验这套国产产品,了解仿制药。巴特
public Iterator<T> iterator() {
return new OrderedObjectSetIterator();
}