Определите объявление метода, аргумент которого является типом реализации - PullRequest
0 голосов
/ 09 июля 2019

У меня есть класс Calculator, который расширяет функцию.Тип аргумента функции - это черта, называемая InputData, а выходной тип функции - другая черта OutputData.

Мне нужно переопределить метод apply.Проблема в том, что я не могу иметь в качестве аргумента класс case, который расширяет InputData.

class Calculator extends (InputData => OutputData) {
  override def apply(data: Numbers): MathResult = { ... }
}

case class Numbers(x1: Int, x2: Int) extends InputData

case class MathResult(y: Int) extends OutputData

Когда я пытаюсь сделать это, я получаю Method 'apply' overrides nothing.

1 Ответ

0 голосов
/ 11 июля 2019

Это не может быть сделано.

  1. Аргумент метода говорит, что он может получать каждый InputData подтип. Если вы указываете конкретный тип для аргумента, вы фактически ограничиваете тип ввода, нарушая объявление метода, поэтому ошибка Method 'apply' overrides nothing. (Спасибо @Luis)

  2. На самом деле эта абстракция не обязательна для варианта использования. Вы можете объявить метод с именем apply и все еще в состоянии вызывать с открытыми и закрытыми скобками. (Спасибо @natan)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...