Регистрация
17 Ноя 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
((IHasModel)item).registerModels(); Что это такое и зачем? IHasModel - это интерфейс; item - переменная класса Item; registerModels - метод интерфейса IHasModel.

Я не понимаю зачем это нужно, и че будет по итогу, а также, почему скобки стоят так странно?

Полный код выглядит так:



for(Item item : Items.itemslist) {

if(item instanceof IHasModel) ((IHasModel)item).registerModels();

}
 
Это приведение к типу, каст, как уже ответили выше. Вероятно в списке Items.itemslist есть наследники класса Items, которые могут реализовывать интерфейс IHasModel и нет. Соответственно, к коде проверяется, реализует ли наследник интерфейс, и если да, то приводим к типу IHasModel, для того, чтобы вызвать метод интерфейса registerModels. Другим образом вызвать его не получится.
А вообще, начиная то ли с 17 java то ли с 14 можно делать так for(Item item : Items.itemslist) {
if(item instanceof IHasModel ihasModel) iHasModel.registerModels();
} что гораздо удобнее, чем приводить руками, но под капотом это тоже самое
 
Конструкция: (тип)значение означает приведение заданного значения к заданному типу.

Сначала мы проверяем, что значение item может быть преобразовано в тип IHasModel: item instanceof IHasModel и если такое преобразование действительно возможно, производим его и вызываем метод registerModels.
 
Item - базовый класс и не имеет метода registerModels()
 
Код интерфейса и класса предоставьте
Странная фигня, обычно каст к нижнему в иерархии классу оправдан, но не к верхнему интерфейсу
Все методы интерфейса доступны во всех наследниках и каст бессмысленен, но и не мешает работоспособности, просто лишний
Вероятно есть еще более верхний интерфейс без этого метода, тогда каст нужен
Что в списке itemsList находится?
 
Назад
Сверху