【发布时间】:2015-03-29 01:59:14
【问题描述】:
我正在尝试(出于教育原因)将 Java 代码重写为 PHP。它在这个存储库中。我的问题是第 42 行的here。我们可以在那里看到以下代码:
if (this.getBoard().getTile(boxNextPlace) instanceof ContentOperations &&
((ContentOperations)this.getBoard().getTile(boxNextPlace)).getContent() == null)
{
...
作为第一步,我们检查this.getBoard().getTile(boxNextPlace) 是否返回实现ContentOperations 接口的对象。如果是,我们进入第二步,再次调用this.getBoard().getTile(boxNextPlace)链,但这一次我们将返回值转换为ContentOperations,然后调用getContent方法进行进一步处理(在这种情况下与null比较,@ 987654329@ 但这与我的问题无关)。
据我了解,在这种情况下,强制转换是一种防止调用方法未由对象实现的保护,但它已经被this.getBoard().getTile(boxNextPlace) instanceof ContentOperations 条件证明,该对象属于ContentOperations 类型。
所以问题是:如果一个对象被证明是所需的类型,为什么还要将它转换成它的接口呢?还是我对铸造这种保护功能的理解是错误的?
【问题讨论】: