скажем, у меня есть общая черта команды с методом execute, который принимает ввод и возвращает вывод. Что-то вроде
trait Input;
trait Output;
trait Command[I <: Input, O <: Output] {
def execute(input: I): O;
}
Затем я собираюсь создать различные команды, что-то вроде
class SampleInput extends Input
class SampleOutput extends Output
class SampleCommand extends Command[SampleInput, SampleOutput] {
def execute(input:SampleInput):SampleOutput = new SampleOutput()
}
Проблема в том, что я могу создать команду с SampleAInput
и SampleBOutput
и компилятором. с радостью приму это. Как мне добиться этого, чтобы компилятор завершился с ошибкой несоответствия типа?
Каким-то образом мне нужно сгруппировать Input
и Output
под типом и передать этот тип для создания
команда. Как мне это сделать?