Как сделать следующий код безопасный тип?

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

6
задан sanjib 20 December 2010 в 03:27
поделиться