我突然忘记if-check内部的方法调用是如何工作的。
示例:
if (list.next() instanceof AClass) {
AClass thing = list.next();
}
仍然在这个例子中,如果next()
迭代到列表中的下一个对象,那么这两个项是否由list.next()
返回同一个对象?
一般来说,方法是否在if-checks内部调用“tests”然后“reverted”,所以在body中相同的方法调用与if-check中的方法调用相同?
答案 0 :(得分:2)
答案取决于next()
方法的实施。例如,如果list
是Iterator
,则每次调用next()
都会使迭代器前进,因此代码中的两个调用会产生不同的结果(假设它们不会抛出异常) )。如果list
是Scanner
,情况也是如此。每次调用next()
都会产生不同的输出。
另一方面,如果next()
方法只返回list
实例的某些属性并且不更改其状态,则多次调用它将提供相同的输出。
通常,名为next()
的方法会更改调用它们的对象的状态,但这只是一种编码约定。
答案 1 :(得分:0)
如果list
是Iterator
,您可能需要以下内容:
AClass thing = null;
Object n = list.next();
if (n instanceof AClass) {
thing = (AClass) n;
}
只需拨打.next()
一次。两个后续调用将返回两个对象,因为内部位置在每个.next()
调用上向前移动一步。没有任何“回归”发生。