Я пытаюсь переписать (по образовательным соображениям) код 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
тип.
Таким образом, вопрос заключается в следующем: зачем нужно приводить объект к его интерфейсу, если доказано, что он имеет требуемый тип? Или, может быть, мое понимание этой защитной функции литья неверно?
Человек, который написал код Java, делает instanceof
проверьте в строке 42, но они забывают сделать еще один в строке 55. Если getTile()
действительно может вернуть объект, который не является ContentOperations
, ClassCastException
будет происходить. Я хотел бы предположить, что вам не нужна дополнительная логика в PHP для учета другого возвращаемого типа.
Других решений пока нет …