Создание функции с универсальным типом с помощью ScalaPB - PullRequest
0 голосов
/ 03 июня 2018

У меня есть следующая функция (которая работает с объектом protobuf MyRequest

  def createRequestFromJson(requestJson: String): MyRequest = {
    val protoJson = getResource(requestJson)
    JsonFormat.fromJsonString[MyRequest](protoJson)
  }

Я хочу повторно использовать эту функцию с другим объектом, поэтому я добавил тип

  def createRequestFromJson[A](requestJson: String): A = {
    val protoJson = getResource(requestJson)
    JsonFormat.fromJsonString[A](protoJson)
  }

, нозатем я получаю сообщение об ошибке

Error:(68, 30) type arguments [A] do not conform to method fromJsonString's type parameter bounds [A <: scalapb.GeneratedMessage with scalapb.Message[A]]
JsonFormat.fromJsonString[A](protoJson)

Я пытался изменить определение на

  def createResponseFromJson[A <: scalapb.GeneratedMessage with scalapb.Message[A]](protoJsonFile: String): A = {

, но все равно выдает больше ошибок

Что я делаю не так?

1 Ответ

0 голосов
/ 04 июня 2018

JsonFormat.fromJsonString нуждается в неявном GeneratedMessageCompanion.Это будет работать, если вы измените подпись на:

def createResponseFromJson[A <: scalapb.GeneratedMessage with scalapb.Message[A]
     : GeneratedMessageCompanion](protoJsonFile: String): A
...