interface I
open class Base(protected val i: I)
class Impl: I
class Derived(args:Bundle): Base( Impl(args) ) { // here I create an instance of Impl
private val my: Impl // See my question
}
My Base class depends on an interface I. But the implementation Impl is created in Derived class. I want to use Impl object in Derived class too. I can see the Base implementation and cast super.i to Impl but I don't want to depends on Base's implementation details. Can I store Impl somewhere to restore in to Derived.my member? I have a restriction from the library: a class has to have a constructor with args:Bundle argument, no more or less
CodePudding user response:
If you are opposed to simply casting the superclass's property i as Impl, you could do this using a secondary constructor and making your primary constructor private:
class Derived private constructor(private val my: Impl): Base(my) {
constructor(args: Bundle): this(Impl(args))
}
