我想将人物对象的目标变量(类型int)与提升物体的当前楼层变量(类型int)进行比较。 person对象位于属于Lift类的ListArray中。我正在使用迭代器接口迭代ListArray,以将每个人的目的地与电梯的当前楼层进行比较。方法match(int destination)用于返回true或false。
这是我的代码不起作用:
Iterator iterator = lift.getOccupants().iterator();
while(iterator.hasNext()){
if(lift.match(iterator.next().getDestination())){
}
getDestination()
方法带有下划线,错误:
找不到符号,方法getDestination(),位置类Object
答案 0 :(得分:1)
next()
方法返回类型是Object,因此您需要键入将其强制转换为Person
对象
像
((Person)iterator.next()).getDestination()
否则你可以使用像List这样的Generic List对象,并通过它获得Generic迭代器。
Iterator<Person> iterator = lift.getOccupants().iterator();
然后你不需要任何演员。
答案 1 :(得分:1)
使用
Iterator<Occupant> iterator = lift.getOccupants().iterator();
涉及Iterator
的正确习语不是while
,而是for
- 循环:
for (Iterator<Occupant> it = lift.getOccupants().iterator; it.hasNext();)
if (lift.match(it.next().getDestination())) it.remove();
这样做的好处是保持it
的范围。
答案 2 :(得分:0)
参数化迭代器,这对你有用
Iterator<Person> iterator = lift.getOccupants().iterator();
while(iterator.hasNext()){
if(lift.match(iterator.next().getDestination())){
}
}
答案 3 :(得分:0)
使用Java 8 Stream
:
lift.getOccupants().stream()
.filter(o -> lift.match(o.getDestination()))
// ...
答案 4 :(得分:0)
在java中使用泛型,如下所示:
Iterator<Person> iterator = lift.getOccupants().iterator();
while(iterator.hasNext()){
if(lift.match(iterator.next().getDestination())){ }