我有一个这样的课程
public class Symbol implements Iterable<Integer> {
private int n = 123;
public Iterator<Integer> iterator() {
return new Iterator() {
int counter = 0;
@Override
public boolean hasNext() {return counter < n;}
@Override
public Integer next() {return counter++;}
@Override
public void remove() { throw new UnsupportedOperationException(); }
};
}
我收到以下警告
Unchecked assignment: 'anonymous java.util.Iterator' to 'java.util.Iterator<java.lang.Integer>'
现在我可以忽略警告或用for循环填充一个arraylist并返回列表的迭代器但是我想这样做很懒,我想做得对,即没有警告。
答案 0 :(得分:4)
您所要做的就是将您的匿名类更改为使用Iterator<Integer>
而不是原始类型:
return new Iterator<Integer>() {
// Code here as before
};
想象一下,它是这样写的:
public Iterator<Integer> iterator() {
Iterator iterator = new Iterator() { ... };
return iterator;
}
那时问题很明显,对吧?您正在使用原始类型Iterator
的值从类型Iterator<Integer>
的方法返回。没有局部变量,它完全相同。根据建议的更改,它等同于明显合理的:
public Iterator<Integer> iterator() {
Iterator<Integer> iterator = new Iterator<Integer>() { ... };
return iterator;
}
答案 1 :(得分:0)
我最好的机会是使用私人课程:
public Iterator<Integer> iterator() {
return new Iti();
}
private class Iti implements Iterator<Integer>{
final int N = n;
int counter = 0;
@Override
public boolean hasNext() {return counter < N; }
@Override
public Integer next() {return counter++;}
@Override
public void remove() { throw new UnsupportedOperationException(); }
}
答案 2 :(得分:0)
使用return new Iterator<Integer>()
。