Что вызывает MOVE_CAST_ERROR при низведении ссылочного объекта в ABAP?

StackOverflow https://stackoverflow.com/questions/1610293

  •  05-07-2019
  •  | 
  •  

Вопрос

Я создаю класс, который наследуется от родительского класса с защищенной реализацией. Суперкласс имеет статический метод, который предоставляет экземпляр класса.

Следующий код вызывает ошибку во время выполнения MOVE_CAST_ERROR :

data: o_child type ref to zchild.

o_child ?= zparent=>provide_instance( ).

Я также пробовал:

data: o_parent type ref to zparent,
      o_child  type ref to zchild.

o_parent = zparent=>provide_instance( ).
o_child  ?= o_parent.

В прошлом я успешно преуменьшал значение других типов объектов. Есть ли у кого-нибудь идеи, что искать в ZPARENT или ZCHILD, которые могут сделать эти два класса несовместимыми?

В настоящее время в ZCHILD есть только один дополнительный метод, который, если его добавить в суперкласс, нарушит абстракцию класса, поэтому я не очень хочу это делать.

Это было полезно?

Решение

Я не делал никакого объектно-ориентированного кодирования в abap. Не слишком много программирования. Но я думаю, что это типичный сценарий. Так вот мое предположение.

Вы не можете привести объект к тому, чем он не является.
Вы создали экземпляр родительского класса. Теперь дочерний класс обладает свойством «myCandy». что родительский класс не имеет. Таким образом, ваш объект не имеет этого свойства. И тогда вы бросаете это ребенку. Что нужно делать во время плохой работы, когда вы запрашиваете (или изменяете) «myCandy»? имущество? Это ничего не может сделать. Так что запретить этот актерский состав.

Приведение возможно только в том случае, если объект был создан как дочерний, а затем был приведен к родительскому объекту, а затем снова к дочернему объекту. У ребенка есть все, что есть у родителя, поэтому с этим путем проблем нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top