我有一個泛型類。它包含了一個對象,並判令:定製的Java迭代器類型混亂
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();) {
我忽略了什麼?
您知道'TreeSet'的,對不對? – 2009-08-17 21:41:42
無論如何,我沒有一個方便的編譯器,但是如果將內部類定義爲'private class OrderedObjectSetIterator implements Iterator'會發生什麼?我認爲'T'可能會在那裏得到重新定義。 –
2009-08-17 21:43:25
以擴展MMyers的評論,如果您使用TreeSet並將您的OrderedObject定義爲compareTo()以使用訂單字段,那麼您可以獲得更高效的免費迭代器.... – 2009-08-17 21:44:46