在设计scala库时我们是否需要避免反射?

时间:2015-07-13 05:22:32

标签: scala reflection argonaut

argonaut为例,在我们的一些项目中,当需要处理JSON时,人们将使用argonaut,并对字段进行硬编码,例如:

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

如果有一个大案例类,列表将很长:

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

我的问题是为什么我们需要对它们进行硬编码,而不是通过反射来获取场地?

是否有任何技术问题,或者人们在设计Scala库时不喜欢使用反射?

1 个答案:

答案 0 :(得分:1)

我不是很清楚你是否试图一般地解析json。我假设你想要解析任何json。 如果是这种情况,您可以使用json4s来完成每个案例类的隐式转换。在这种情况下,您不需要为每个类提供implcit转换。我们在项目中广泛使用它。 您只需要为每种类型提供隐式转换器(例如:如何隐藏java.sql.timestamp,java.sql.Date,Joda-Time等)。

可能这个link可能对您有所帮助。