Нужно ли избегать размышлений при разработке библиотек scala?

Принимать argonaut например, в некоторых наших проектах, когда есть необходимость обрабатывать JSON, люди будут использовать для этого аргонавт и жестко кодировать поля, например:

implicit def AddressCodecJson: CodecJson[Address] =
    casecodec3(Address.apply, Address.unapply)("street", "number", "post_code")

Если есть большой класс case, список будет очень длинным:

implicit def AddressCodecJson: CodecJson[Address] =
    casecodec12(Address.apply, Address.unapply)("street", "number", "post_code", "...", "...", "...", "...", "...", "...", "...", "...", "...")

Мой вопрос заключается в том, почему мы должны жестко их кодировать, а не получить поле с помощью отражения?

Есть какие-то технические проблемы, или люди просто не любят использовать отражение при разработке библиотек Scala?

1 ответ

Решение

Я не очень ясно, пытаетесь ли вы анализировать JSON в общем. Я предполагаю, что вы хотите проанализировать любой JSON в общем. Если это так, вместо создания неявного преобразования для каждого из классов case, вы можете использовать json4s сделать это. В этом случае вам не нужно предоставлять преобразование implcit для каждого класса. Мы широко используем его в нашем проекте. Вам нужно только дать неявный конвертер для каждого типа (например, для: как конвертировать java.sql.timestamp, java.sql.Date, Joda-Time и т. Д.).

Возможно, эта ссылка может вам помочь.

Другие вопросы по тегам