[英]Custom Java Iterator with type confusion
I have a generic class which bundles an Object and an order: 我有一个泛型类捆绑一个对象和一个订单:
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;
}
}
I developed a Set
implementation which stores OrderedObject<T>
instances and wants to produce an Iterator<T>
enumerating in the order enforced by the built-in order: 我开发了一个
Set
实现,它存储OrderedObject<T>
实例,并希望按照内置顺序强制执行的顺序生成Iterator<T>
:
public class OrderedObjectSet<T> extends AbstractSet<T> implements Set<T> {
Set<OrderedObject<T>> s = new HashSet<OrderedObject<T>>();
public boolean add(int order, T object) {
return s.add(new OrderedObject<T>(order, object));
}
public Iterator<T> iterator() {
return new OrderedObjectSetIterator<T>();
}
public int size() {
return s.size();
}
private class OrderedObjectSetIterator<T> implements Iterator<T> {
private int index;
public boolean hasNext() {
return index < s.size();
}
public T next() {
T object = null;
for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {
OrderedObject<T> o = it.next();
if (o.getOrder() == index) {
object = o.getObject();
}
}
index++;
return object;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
}
The latter class does not compile because there seems to some confusion of types in the Iterator
initialization at 后一类没有编译,因为
Iterator
初始化中的类型似乎有些混乱
for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {
What do I overlook? 我有什么看法?
The confusion is because the inner class OrderedObjectSetIterator
introduces a generic type called the same ( T
) as the outer class. 混淆是因为内部类
OrderedObjectSetIterator
引入了一个名为same( T
)的泛型类型作为外部类。 Eclipse IDE shows a warning: Eclipse IDE显示警告:
The type parameter T is hiding the type T
So I guess you don't need to introduce another parameter type, just use the same as the outer class defines. 所以我猜你不需要引入另一个参数类型,只需使用外部类定义的相同。
Basically, the inner class would be defined as: 基本上,内部类将定义为:
private class OrderedObjectSetIterator implements Iterator<T> {
....
And the iterator method as: 并且迭代器方法如下:
public Iterator<T> iterator() {
return new OrderedObjectSetIterator();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.