Я использую https://pureconfig.github.io/ для загрузки значений конфигурации.Например, для каждой таблицы в базе данных я храню (db: String, table: String)
. Однако мне нужно обозначить конкретные таблицы.Поэтому у каждого есть отдельная черта.Т.е.:
trait Thing
trait ThingWithStuff extends Thing {
def value:String
}
trait FooThing extends Thing{
def fooThing: ThingWithStuff
}
trait BarThing extends Thing{
def barThing: ThingWithStuff
}
Все они имеют разные имена атрибутов с одинаковым типом, который в свою очередь содержит, например, db
и table
.При обработке их некоторыми методами:
def myMethodFoo(thing:FooThing)= println(thing.fooThing)
def myMethodBar(thing:BarThing)= println(thing.barThing)
это приводит к дублированию кода.Пытаясь исправить это с помощью обобщений, я не могу написать такую функцию, как:
def myMethod[T<: Thing] = println(thing.thing)
, поскольку имя атрибута будет другим.Есть ли умный способ обойти это?Примечание:
table-first {
db = "a"
table = "b"
}
table-second {
db = "foo"
table = "baz"
}
не может иметь один и тот же идентификатор заранее, так как в противном случае будет перезаписано каждое значение, чтобы оно содержало только значение последнего элемента для этого идентификатора.Поэтому я прибегнул к использованию разных имен атрибутов (table-first, table-second
или специально для примера: fooThing, barThing
)
Как я могу исправить эту проблему, чтобы предотвратить дублирование кода?