скажем, у меня есть общая черта команды с методом 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
по типу и передать этот тип для создания
команда. Как мне это сделать?