当我编写Java代码时,我发现基于注释的库非常受欢迎,例如hibernate
,Jackson
,Gson
,Spring-MVC
。但是在Scala中,大多数流行的库都不提供注释,或者提供但是建议使用非注释方法,例如: squerly
,slick
,argonaut
,unfiltered
等。
有时,我发现注释更容易阅读和维护,但为什么人们对它们不那么感兴趣?
答案 0 :(得分:5)
一个原因是注释通常必须在声明站点使用。因此,您必须使用与业务逻辑无关的代码“污染”您的域模型。另一方面,基于宏或类型类的解决方案通常应用于使用现场。这样可以提高域模型的可重用性。
例如,如果您需要针对不同任务使用不同的序列化逻辑,该怎么办?使用注释,除了使用修改的注释实现模型的其他表示之外,您通常别无选择。对于类型类(可能通过宏自动派生),您必须实现另一个实例并根据您的需要注入它。
答案 1 :(得分:3)
宏和implicits通常可以用作注释的替代,并具有静态检查的好处。