Разница между классом case с круглыми скобками и без - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть кейс класса case class FOO. И хотел бы протестировать метод myMethod, который возвращает FOO() заданное значение параметра value1.

У меня есть тест вроде: myMethod(value1) should equal FOO.

Тест не пройден с FOO did not equal FOO().

В чем разница между FOO и FOO()?

1 Ответ

6 голосов
/ 17 февраля 2020

A case class Foo() превращается во что-то, эквивалентное

class Foo() extends Product with Serializable {
  // some methods
}

object Foo extends (() => Foo) with Serializable {
  // some methods
}

Итак, Foo() создает экземпляр класса Foo, а Foo является ссылкой на объект-компаньон Foo.

Однако, если ваш класс case Foo не имеет параметров, вам следует рассмотреть возможность сделать его case * . Если вы не злоупотребляете своим классом case с внутренним изменяемым состоянием [1], все Foo() экземпляры должны быть в любом случае неразличимы.

[1] Если это так, рассмотрите возможность использования обычного класса.

...