我有一个通用类,它捆绑了一个对象和一个订单:
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;
}
}
我开发了一个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();
}
}
}
后一个类无法编译,因为似乎存在一些类型混淆Iterator
初始化于
for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {
我忽略了什么?
混乱是因为内部类OrderedObjectSetIterator
引入了一个名为 same 的泛型类型 (T
) 作为外部类。 Eclipse IDE 显示警告:
The type parameter T is hiding the type T
所以我想你不需要引入另一个参数类型,只需使用与外部类定义相同的参数类型即可。
基本上,内部类将定义为:
private class OrderedObjectSetIterator implements Iterator<T> {
....
迭代器方法如下:
public Iterator<T> iterator() {
return new OrderedObjectSetIterator();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)