Cosa causa MOVE_CAST_ERROR quando si esegue il down-casting di un oggetto di riferimento in ABAP?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Sto creando una classe che eredita da una classe genitore con istanza protetta. La super classe ha un metodo statico che fornisce un'istanza della classe.

Il seguente codice provoca un errore di runtime MOVE_CAST_ERROR :

data: o_child type ref to zchild.

o_child ?= zparent=>provide_instance( ).

Ho anche provato:

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

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

In passato ho eseguito correttamente il down-cast con altri tipi di oggetti: qualcuno ha un'idea di cosa cercare in ZPARENT o ZCHILD che potrebbe rendere incompatibili le due classi?

Attualmente ZCHILD ha solo un metodo aggiuntivo, che se aggiunto alla superclasse spezzerebbe l'astrazione della classe, quindi non sono così entusiasta di farlo.

È stato utile?

Soluzione

Non ho fatto alcuna codifica orientata agli oggetti in abap. Né molta programmazione abap. Ma penso che questo sia uno scenario tipico di oo. Quindi ecco la mia ipotesi.

Non puoi lanciare un oggetto su ciò che non è.
Hai creato un'istanza della classe genitore. Ora la classe child ha la proprietà di " myCandy " che la classe genitore non ha. Quindi il tuo oggetto non ha questa proprietà. E poi lo lanci a bambino. Che cosa deve fare il tempo di funzionamento scadente quando chiedi (o cambi) il " myCandy " proprietà? Non può fare niente. Quindi non consente questo cast.

Il cast è possibile solo se l'oggetto è stato istanziato come figlio e quindi è stato lanciato sull'oggetto genitore e quindi di nuovo sull'oggetto figlio. Il bambino ha tutto ciò che ha il genitore, quindi non ci sono problemi con questo percorso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top