2016-07-11 6 views
0

У меня возникли проблемы с добавлением неявно определенного конвертера типов для типа, для которого у меня также есть формат Json. Я сомневаюсь, что проблема имеет какое-либо отношение к Json (или Spray). Или MyDate в этом случае.Объекты Companion, implicits и Json

Вот фрагмент кода, который приводит к проблеме я испытывающей:

case class MyDate(y: Int, m: Int, d: Int) 
object JsonProblem extends App { 
import spray.json.{DefaultJsonProtocol, _} 
object MyJsonProtocol extends DefaultJsonProtocol with NullOptions { 
    implicit val myDateFormat = jsonFormat3(MyDate) 
} 
import MyJsonProtocol._ 
val exampleDate = """{ "y": 2016, "m": 7, "d": 11 }""" 
val y: MyDate = exampleDate.parseJson.convertTo[MyDate] 
} 

До сих пор все работает, как ожидалось. Значение y принимает соответствующий экземпляр MyDate.

Теперь, после определения случая класса (хотя я не думаю, что это важно, где я ставлю этот код), я познакомлю объект компаньона таким образом:

object MyDate { 
    implicit def convertMyDateToInt(x: MyDate): Int = ??? 
} 

Сразу, я получаю ошибку компиляции на myDateFormat line: * не может решить ссылку jsonFormat3 с такой подписью *. Цель моего дополнительного кода не связана (с моей точки зрения) с разбором Json. Это потому, что в какой-то другой части кода я хочу неявно преобразовать MyDate в Int.

Я ожидаю, что это связано с тем, что я заменяю (или улучшая) созданный компилятором объект-компаньон с моим собственным. Но в чем же проблема и как я могу ее обойти?

ответ

2

Просто используйте компаньон объекты применить функцию

import spray.json._ 

case class MyDate(y: Int, m: Int, d: Int) 

object MyDate { 
    implicit def convertMyDateToInt(x: MyDate): Int = ??? 
} 

object JsonProblem extends App { 
    object MyJsonProtocol extends DefaultJsonProtocol with NullOptions { 
    implicit val myDateFormat:RootJsonFormat[MyDate] = jsonFormat3(MyDate.apply) 
    } 
    import MyJsonProtocol._ 
    val exampleDate = """{ "y": 2016, "m": 7, "d": 11 }""" 
    val y: MyDate = exampleDate.parseJson.convertTo[MyDate] 
} 
+0

Спасибо, я думал об этом! – Phasmid

 Смежные вопросы

  • Нет связанных вопросов^_^