Я пытаюсь перейти на последнюю версию upickle 0.7.1.Там, где я ранее обошел неявных читателей и писателей, я считаю, что теперь я должен использовать один ReadWriter и явно определять их в сопутствующем объекте для любых классов дел, которые я хочу сериализовать.Но я не могу понять, как это работает для параметризованного типа.Например, скажем, перед обновлением у меня было следующее (с 0.4.4):
trait OldTrait[T] {
implicit val evr: Reader[T]
implicit val evw: Writer[T]
def save(t: T): String = write(t)
def restore(str: String): T = read[T](str)
}
class MyOldClass[T](implicit val evr: Reader[T], val evw: Writer[T]) extends OldTrait[T] {
}
case class Request[T](msg: T)
val c1 = new MyOldClass[Request[Int]]
Приведенный выше код отлично скомпилирован для меня.Чтобы перенести этот код, я попробовал следующее:
trait NewTrait[T] {
implicit val evrw: ReadWriter[T]
}
class MyNewClass[T](implicit val evrw: ReadWriter[T]) extends NewTrait[T] {
}
object Request {
implicit val rw: ReadWriter[Request[_]] = macroRW
}
val c2 = new MyNewClass[Request[Int]]
Но это не скомпилирует для меня.Я получаю следующие ошибки:
Не знаю, как получить тип ... Запрос [] неявный val rw: ReadWriter [Запрос []] = macroRW
... не удалось найти неявное значение для параметра evrw: upickle.default.ReadWriter [Request [Int]]
... недостаточно аргументов для конструктора MyNewClass: (неявное evrw: upickle.default.ReadWriter [Запрос [Int]]) MyNewClass [Запрос [Int]].Не указано значение параметра evrw.val c2 = новый MyNewClass [Запрос [Int]]
Каков правильный подход к переносу старого кода?