Я попробовал несколько вещей, я думаю, что мой лучший подход на данный момент -
interface BarInterface {
val bar: Int
}
interface FooBarInterface {
var _foo: BarInterface
val foo get() = _foo
}
data class Bar(override val bar: Int): BarInterface {}
data class FooBar(override val foo: Bar): FooBarInterface {
override var _foo: BarInterface = foo
}
, который позволяет мне делать
val bar = Bar(bar = 1)
val fooBar = FooBar(foo = bar)
val barInterface: BarInterface = bar
val fooBarInterface: FooBarInterface = fooBar
print(fooBar.foo.bar)
print(fooBarInterface.foo.bar)
, что не очень хорошо, но работает.