我正在尝试将(Java)的Java代码重写(出于教育原因)。它在这个存储库中。我的问题是第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 .getContent()==null
进行比较,但这与我的问题无关。)
据我所知,在这种情况下,转换是对某个未被对象实现的调用方法的某种保护,但已经由this.getBoard().getTile(boxNextPlace) instanceof ContentOperations
条件验证,该对象属于ContentOperations
类型。
所以问题是:如果证明它是必需的类型,为什么要将对象转换为必要的接口呢?或许我对这种铸造保护功能的理解是错误的?
答案 0 :(得分:0)
编写Java代码的人在第42行进行了instanceof
检查,但他们忽略了在第55行再次执行一次。如果getTile()
确实可以返回不是{的对象{1}},会出现ContentOperations
。我假设您在PHP中不需要任何额外的逻辑来考虑不同的返回类型。