Согласно вашему коду, ElectricPart
не является причиной для enum class
- перечисление без перечислителей не имеет смысла.
Для целей именования ElectricPart
также может быть class
(с закрытым конструктором, т.е. без экземпляров) или object
(ровно один одноэлементный экземпляр).Обратите внимание, что классы изначально не предназначены для использования в качестве пространств имен в Kotlin, т. Е. Они оплачиваются за счет затрат времени выполнения JVM, даже если вы используете их имя только во время компиляции.
Автомобиль имеет электрическийчасти (ElectricPart
).VisionLight
s и DirectionLight
s являются частью электрики автомобиля.
Это звучит как типичные отношения : видение и указатели поворота являются электрическими частями автомобиля.Это отношение обычно моделируется с помощью наследования и реализации интерфейса, поэтому вы можете сделать это следующим образом:
interface ElectricPart
enum class VisionLight(val id:String) : ElectricPart {...}
enum class DirectionLight(val id:String) : ElectricPart {...}
Имейте в виду, что интерфейсы в первую очередь полезны, когда у вас есть методы, которые переопределяются в каждой реализации, для достижения полиморфного поведения,Тем не менее, также возможно использовать маркерные интерфейсы (интерфейсы без методов) в тех местах, где в противном случае вам пришлось бы использовать менее безопасный тип Any
.