2015-07-13 80 views
0

argonaut例如,在我們的一些項目,當有需要處理JSON,人們會用淘金是什麼,以及硬編碼的領域,如:設計scala庫時,我們是否需要避免反思?

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庫時使用反射?

+0

一般來說,反射速度很慢,不是線程安全的,最重要的是在編譯時沒有任何證明。 – ipoteka

回答

1

我不是很清楚你是否試圖一般地解析json。我假設你想要一般地解析任何json。 如果是這種情況,則可以使用json4s來實現此目的,而不是爲每個案例類別創建隱式轉換。在這種情況下,您無需爲每個班級提供implcit轉換。我們在我們的項目中廣泛使用它。 您只需要爲每種類型提供隱式轉換器(例如:如何隱藏java.sql.timestamp,java.sql.Date,Joda-Time等)。

也許,這個link可能會幫助你。

+0

感謝您推薦'json4s',我喜歡它,並在我的個人項目中使用它。我只是不清楚爲什麼人們想要使用一種需要硬編碼一切的方法。我問了一些,他們不是很清楚,只是從較舊的項目複製 – Freewind

+0

@Freewind:我也想知道同樣的事情。但可能對於小項目,人們發現案例類明智的隱式轉換更容易。但我相信,管理這麼多隱式的轉換是太過分了。我不確定它會產生多少性能影響,但我更喜歡通用解決方案,因爲隨着項目的發展,它使生活變得更加簡單。 –

相關問題