为什么基于注解的库在 Scala 中不那么流行?

Why annotation based libraries are not so popular in Scala?

当我编写 Java 代码时,我发现基于注释的库非常流行,例如hibernateJacksonGsonSpring-MVC。但是在 Scala 中,大多数流行的库都没有提供注释,或者提供但推荐非注释方法,例如squerlyslickargonautunfiltered

有时,我发现注释更易于阅读和维护,但为什么人们对它们不那么感兴趣?

宏和隐式通常可以用作注释的替代品,并具有静态检查的好处。

一个原因是通常必须在声明位置使用注释。因此,您必须 "pollute" 使用与您的业务逻辑无关的代码来构建域模型。另一方面,基于宏或类型 类 的解决方案通常应用于使用现场。这允许您的域模型具有更高的可重用性。

例如,如果您需要针对不同的任务使用不同的序列化逻辑怎么办?对于注解,您通常别无选择,只能使用修改后的注解实现模型的附加表示。使用类型 类(可能通过宏自动派生),您只需实现另一个实例并根据您的需要注入它。