В моем модуле core
sbt есть трейт Matrix
для матричного типа данных и трейт MatrixInstance
с некоторыми фабричными методами. Предполагается, что сопутствующий объект расширяет эту черту.
В отдельном подмодуле sbt implementation1
хотелось бы это реализовать
object Matrix extends MatrixInstance { ... }
компаньон.
Идея здесь в том, что если я решу иметь вторую реализацию, пользователь библиотеки может просто изменить свой libraryDependencies += ...
с implementation1
на implementation2
.
Однако, похоже, это не работает. то есть он выглядит как объект, и его компаньон должен находиться в том же модуле (файле?). В противном случае я получаю циклические зависимости, и scalac терпит неудачу.
Есть ли какой-нибудь шаблон, который я могу использовать для достижения этой функциональности? то есть определить черту интерфейса для объекта фабрики/компаньона, реализовать его в отдельном артефакте, а затем разрешить пользователю выбирать между реализациями, только изменив libraryDependencies
?