Приведение объекта к его интерфейсу с точки зрения переполнения стека

Я пытаюсь переписать (по образовательным соображениям) код Java на PHP. Это в этом хранилище. Моя проблема Вот в строке 42. Мы видим там следующий код:

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 метод для дальнейшей обработки (в этом случае сравнить его с нулем, .getContent()==null но это не имеет отношения к моему вопросу).

Насколько я понимаю, приведение в этом случае является некой защитой от вызова метода, не реализованного объектом, но это уже доказано this.getBoard().getTile(boxNextPlace) instanceof ContentOperations условие, что объект имеет ContentOperations тип.

Таким образом, вопрос заключается в следующем: зачем нужно приводить объект к его интерфейсу, если доказано, что он имеет требуемый тип? Или, может быть, мое понимание этой защитной функции литья неверно?

-2

Решение

Человек, который написал код Java, делает instanceof проверьте в строке 42, но они забывают сделать еще один в строке 55. Если getTile() действительно может вернуть объект, который не является ContentOperations, ClassCastException будет происходить. Я хотел бы предположить, что вам не нужна дополнительная логика в PHP для учета другого возвращаемого типа.

0

Другие решения

Других решений пока нет …