¿Qué causa MOVE_CAST_ERROR cuando se emite un objeto de referencia en ABAP?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Estoy creando una clase que hereda de una clase padre con instanciación protegida. La súper clase tiene un método estático que proporciona una instancia de la clase.

El siguiente código provoca un error en tiempo de ejecución MOVE_CAST_ERROR :

data: o_child type ref to zchild.

o_child ?= zparent=>provide_instance( ).

También he intentado:

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

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

He tenido éxito con otros tipos de objetos en el pasado: ¿alguien tiene una idea de qué buscar en ZPARENT o ZCHILD que pueda hacer que las dos clases sean incompatibles?

Actualmente, ZCHILD solo tiene un método adicional, que si se agrega a la súper clase rompería la abstracción de la clase, por lo que no tengo muchas ganas de hacerlo.

¿Fue útil?

Solución

No hice ninguna codificación orientada a objetos en abap. Ni mucha abap programación. Pero creo que este es un escenario típico oo. Así que aquí está mi conjetura.

No puedes lanzar un objeto a lo que no es.
Has creado una instancia de la clase padre. Ahora la clase secundaria tiene la propiedad de " myCandy " que la clase padre no tiene. Entonces tu objeto no tiene esta propiedad. Y luego lo arrojas al niño. Qué debe hacer el tiempo de ejecución deficiente cuando solicita (o cambia) el " myCandy " ¿propiedad? No puede hacer nada. Por lo que no se permite este elenco.

La conversión solo es posible si el objeto se creó como un elemento secundario y luego se convirtió en el objeto principal y luego se devolvió al objeto secundario. El niño tiene todo lo que el padre tiene, por lo que no hay problema con esta ruta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top