Я пытаюсь создать DSL , один из методов этого DSL не имеет параметров и использует ограниченный тип generi c. Сегодня я должен добавить «функцию», которая в идеале будет использовать то же имя метода. Однако, поскольку единственным параметром является параметр generi c, я не могу переопределить его обычным способом.
Есть ли хитрость, позволяющая использовать один и тот же метод для разных типов generi c?
Мой метод выглядит следующим образом:
def ask[H <: Handler] = {
new CommandBuilder[H]
}
class CommandBuilder[H <: Handler] {
def toExecute[C <: H#C](command: C) = {
//...
}
}
И я хотел бы добавить:
def ask[S <: State] = {
new QueryBuilder[S]
}
class QueryBuilder[S <: State] {
def toExecute[Q <: S#Q](query: Q) = {
//...
}
}
Я думал сопоставить шаблон с ClassTag
для типа, но я нужен сильный тип безопасности:
Query
на Handler
, не допускается. ask [State] должен вернуть QueryBuilder Command
и Query
являются единственными поддерживаемыми типами. Тип c обобщенного типа ask
может быть только Handler
или State
.