Я не уверен, что то, что я пытаюсь сделать, просто невозможно, или я просто думаю об этом совершенно неправильно, но по сути это то, что я пытаюсь сделать. У меня есть запечатанный класс с несколькими классами внутри, как это:
sealed class MySealedClass(val thing: Thing) : MyPropertyInterface
{
val name: String = thing.name
/** Base Methods Here */
/** Obj 1 Constructor */
class ObjOne(thing: Thing) : MySealedClass(thing)
{
override val properties = PropertyTypeOne()
override val otherProperties = PropertyTypeTwo()
inner class PropertyTypeOne(){
val one = 1
}
inner class PropertyTypeTwo(){
val two = 2
}
}
/** Obj 2 Constructor */
class ObjTwo(thing: Thing) : MySealedClass(thing)
{
override val properties = PropertyTypeOne()
override val otherProperties = PropertyTypeTwo()
inner class PropertyTypeOne(){
val one = 1
}
inner class PropertyTypeTwo(){
val two = 2
}
}
}
По сути, я хочу, чтобы классы в моем запечатанном классе наследовали эти свойства области так, как интерфейс заставлял бы их инициализировать их, поскольку они будут содержать свойства одного типа, но разные значения. Причина, по которой я хочу, чтобы свойства были ограничены областью, заключается в том, что вместо того, чтобы обращаться к ним через список, я хочу получить к ним прямой доступ (просто для большей читабельности), и без области видимости может стать неясно, к чему вы обращаетесь. Я понимаю, что мог бы создать собственный интерфейс для каждого класса внутри запечатанного класса, содержащего указанные классы с указанными свойствами, но моя проблема заключается в том, что я хочу, в некотором смысле, принудительно применить это к классам в запечатанном классе, который они должны построить эти две структуры данных. Создавая собственный интерфейс для каждого класса, можно было бы предположить, что один из них больше не соответствует критериям из-за человеческой ошибки.