¿Referencia fuera de la clase sellada en Kotlin?

Estoy tratando de crear una clase que use su propio estado para operar en el estado de un objeto externo al que tiene una referencia. El objeto externo puede ser de clase A o B, que son similares, pero no controlados por el autor. Por lo tanto, se crea una clase sellada para acceder a sus atributos comunes, poresta respuesta anterior de @ SimY4.

// *** DOES NOT COMPILE ***
class A {   // foreign class whose structure is not modifiable
  val prop get()= "some string made the Class-A way"
}
class B {   // foreign class whose structure is not modifiable
  val prop get()= "some string made the Class-B way"
}
data class ABTool (val obj:AB, val i:Int, val j:Int) {
  // class that manipulates i and j and uses them to do
  // things with AB's "common" attributes through the sealed class AB
  sealed class AB {   // substitute for a common interface
    abstract val prop: String
    abstract val addmagic: String
    data class BoxA(val o:A) : AB() {
      override val prop get()= o.prop
      override val addmagic get() = prop + this@???.magic  // HOW TO REFERENCE?
    }
    data class BoxB(val o:B) : AB() {
      override val prop get()= o.prop
      override val addmagic get() = this@???.magic + prop  // HOW TO REFERENCE?
    }
  }
  val magic get()= "magic: ${i*j}"
}

El problema ahora es que he descubierto que no puedo operar en el objeto externo de la manera que quiero, porque una clase sellada no puede referirse a sus miembros externos. ¿Hay una mejor manera de hacer que esto funcione, incluso si se utiliza un enfoque diferente (que no sea la clase sellada), mientras que:

no cambiar las clases extranjeras A o B;Respetando que A y B (y muchos otros en el caso real) son similares, entonces estoy tratando de escribir una herramienta que calcule y agregue magia a A y B con la misma base de código; yobservando que aunque las herramientas ABTool son las mismas, la forma en que se aplican para agregar magia es ligeramente diferente en A vs. B, así como el acceso a los elementos conceptualmente comunes de A y B puede ser diferente.

¿Alguna idea sobre esto o una solución similar? ¿Quizás un enfoque más funcional que aún no he concebido?

Respuestas a la pregunta(2)

Su respuesta a la pregunta