Какой из импортируемых сопутствующих объектов или расширяющих черт лучше - PullRequest
2 голосов
/ 11 марта 2019

У меня есть протокол JSON, написанный в спрей

trait MyJsonProtocol {
   //some logic
}

object MyJsonProtocol extends MyJsonProtocol {

}

Что лучше? Импортировать этот сопутствующий объект или расширить черту?

Ответы [ 3 ]

2 голосов
/ 11 марта 2019

Если вы создаете несколько JsonFormat экземпляров для спрея, вы можете просто создать object напрямую и import это.Это означает, что у вас есть только один экземпляр ваших неявных значений и объектов.

object MyJsonProtocol extends DefaultJsonProtocol {
  implicit object MyTypeJsonFormat extends RootJsonFormat[MyType] {
    def write(v: MyType): JsValue = ...
    def read(value: JsValue): MyType = ...
  }

  implicit val myClassFormat = jsonFormat5(MyClass)
}

class OtherClass {
  import MyJsonProtocol._

  ...
}
0 голосов
/ 12 марта 2019

Это зависит от вашей логики.Если вы определите некоторые последствия, то импорт объекта и расширение черты будут разными.При импорте вы определяете последствия того же приоритета, что и локальные.При расширении вы создаете импликации с низким приоритетом по сравнению с локальными.

0 голосов
/ 11 марта 2019

Это зависит от сценария, поскольку сопутствующий класс или объект могут получить доступ к закрытым членам своего компаньона. Используйте объект-компаньон для методов и значений, которые не относятся к экземплярам класса-компаньона. Если вы просто хотите множественное наследование, но разрешаете повторное использование кода, тогда черта в порядке.

Надеюсь, это поможет.

...