java—如果检查“测试”然后“还原”,方法调用是否在内部?

qvtsj1bj  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(360)

我突然忘记了如果检查有效的话方法是如何在内部调用的。
例子:

if (list.next() instanceof AClass) {
    AClass thing = list.next();
}

在这个例子中,如果 next() 迭代到列表中的下一个对象,返回的两个项是 list.next() 同一个物体?
通常,if检查中的方法调用是“测试”的,然后“还原”的,所以主体中的方法调用与if检查中的方法调用相同吗?

ahy6op9u

ahy6op9u1#

答案取决于该计划的实施 next() 方法。例如,如果 list 是一个 Iterator 然后每次呼叫 next() 推进迭代器,这样代码中的两个调用将给出不同的结果(假设它们不引发异常)。如果 list 是一个 Scanner . 每次呼叫 next() 会产生不同的输出。
另一方面,如果 next() 方法只返回 list 示例,并且不更改其状态,对它的多个调用将提供相同的输出。
通常称为 next() 更改调用它们的对象的状态,但这只是一种编码约定。

ttygqcqt

ttygqcqt2#

如果 list 是一个 Iterator ,您可能需要:

AClass thing = null;
Object n = list.next();
if (n instanceof AClass) {
     thing = (AClass) n;
}

为了打电话 .next() 就一次。两个后续调用将返回两个对象,因为内部位置在每个对象上向前移动一步 .next() 调用。没有任何类型的“逆转”发生。

相关问题