O que causa MOVE_CAST_ERROR quando down-lançando um objeto de referência em ABAP?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Estou criando uma classe que herda de uma classe pai com instanciação protegida. O super classe tem um método estático que fornece uma instância da classe.

O código a seguir faz com que um MOVE_CAST_ERROR erro de tempo de execução:

data: o_child type ref to zchild.

o_child ?= zparent=>provide_instance( ).

Eu também tentei:

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

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

Eu tenho sucesso down-fundido com outros tipos de objetos no passado - alguém tem uma idéia do que procurar em ZPARENT ou ZCHILD que podem fazer as duas classes são incompatíveis?

Atualmente ZCHILD só tem um método extra, que se adicionado à classe de super iria quebrar a abstração da classe, então eu não sou tão interessado em fazê-lo.

Foi útil?

Solução

Eu não fiz qualquer objeto orientada codificação em ABAP. Nem muito programação ABAP. Mas eu acho que este é um cenário oo típico. Então aqui é o meu palpite.

Você não pode converter um objeto para o que não é.
Você criou uma instância da classe pai. Agora, a classe filha tem a propriedade de "myCandy" que a classe pai não tem. Portanto, o seu objeto não tem essa propriedade. E então você lançá-lo para filho. O que os pobres tempo de execução tem que fazer quando você pedir (ou mudança) a propriedade "myCandy"? Ele não pode fazer nada. Por isso, não permitir esse elenco.

O elenco só é possível se o objeto foi instanciado como a criança e, em seguida, ele foi escalado para o objeto pai e, em seguida, volta novamente para o objeto filho. A criança tem tudo o que o pai tem por isso não há problema com este caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top