Quelles sont les causes de MOVE_CAST_ERROR lors de la conversion d'un objet de référence dans ABAP?

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

  •  05-07-2019
  •  | 
  •  

Question

Je crée une classe qui hérite d'une classe parent avec une instanciation protégée. La super classe a une méthode statique qui fournit une instance de la classe.

Le code suivant provoque une erreur d'exécution MOVE_CAST_ERROR :

data: o_child type ref to zchild.

o_child ?= zparent=>provide_instance( ).

J'ai aussi essayé:

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

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

J'ai déjà utilisé avec succès d'autres types d'objets - quelqu'un a-t-il une idée de ce qu'il faut rechercher dans ZPARENT ou ZCHILD qui pourrait rendre les deux classes incompatibles?

Actuellement, ZCHILD n’a qu’une méthode supplémentaire qui, si elle était ajoutée à la super classe, briserait l’abstraction de la classe. Je ne suis donc pas pressé de le faire.

Était-ce utile?

La solution

Je n'ai pas fait de codage orienté objet dans abap. Ni beaucoup de programmation d'abap. Mais je pense que c’est un scénario typique. Alors voici ma conjecture.

Vous ne pouvez pas lancer un objet sur ce qu'il n'est pas.
Vous avez créé une instance de la classe parente. La classe enfant a maintenant la propriété de " myCandy " que la classe parente n'a pas. Donc, votre objet n'a pas cette propriété. Et puis tu le jettes sur enfant. Ce que le mauvais temps doit faire lorsque vous demandez (ou modifiez) le paramètre "myCandy" propriété? Cela ne peut rien faire. Donc, il rejette cette distribution.

La conversion n'est possible que si l'objet a été instancié en tant qu'enfant, puis il a été converti en objet parent, puis de nouveau en objet enfant. L'enfant a tout ce que le parent a donc il n'y a pas de problème avec ce chemin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top