【发布时间】:2014-05-16 03:50:19
【问题描述】:
我有以下代码(是的,我知道迭代器的实现不正确。这是我正在写的考试题):
public class MyList<Integer> extends ArrayList<Integer> {
public void noOdds() {
MyIterator<Integer> iter = this.iterator();
while (iter.hasNext()) {
if (iter.next() % 2 == 1)
iter.remove();
}
}
public MyIterator<Integer> iterator() {
return new MyIterator<Integer>(this);
}
public class MyIterator<Integer> implements Iterator<Integer> {
List<Integer> data;
int size;
int position;
MyIterator(List<Integer> data) {
this.data = data;
this.size = data.size();
this.position = 0;
}
public boolean hasNext() {
if (this.position < this.size)
return true;
else
return false;
}
public Integer next() {
Integer tmp = this.data.get(this.position);
this.position++;
return tmp;
}
public void remove() {
if (this.position == 0)
throw new IllegalStateException("next hasn't been called yet");
this.data.remove(this.position - 1);
}
}
}
当我编译时,它不会自动将 Integer 装箱为模运算,我得到 p>
MyList.java:9:错误:二元运算符“%”的操作数类型错误 if (iter.next() % 2 == 1)
第一种类型:整数
第二种类型:int
如果我将iter.next() 更改为iter.next().intValue(),我会得到
MyList.java:9:错误:找不到符号 if (iter.next().intValue() % 2 == 1)
符号:方法 intValue()
位置:类对象
但是,如果我改变了
public class MyList<Integer>...
到
public class MyList
然后错误消失。
想到发生了什么?
谢谢。
【问题讨论】: