什么是scala替代运行时保留的注释
我只是意识到我不能在
scala中有注释,在运行时被保留和分析.我也检查了
this question,但我没有得到它什么是替代品.
> DI – 一个答案提到在scala中不需要DI框架.虽然在基础上可能是这种情况(虽然我不太喜欢that example;处理DI的惯用方式是什么?),但像Spring这样的Java DI框架相当先进,可以处理诸如计划作业,缓存,管理持久性等等,全部通过注释,有时是自定义的. Scala用户需要使用混合scala / java(用于注释)项目才能使用来自Java的这些工具? 元数据的本机scala替代品比注释更好?我还没有完全进入Scala的思维模式,因此,与使用注释相比,大多数示例看起来都比较丑陋,所以请尝试增加令人信服的:) 解决方法
实际上,Scala确实有运行时保留的注释.不同之处在于它们不作为Java注释存储,而是在二进制ScalaSignature注释的内容(本身就是运行时保留的Java注释)内进行编码.
因此,Scala注释可以在运行时检索,但不是使用Java反射,必须使用Scala反射: class Awesome extends StaticAnnotation @Awesome class AwesomeClass import scala.reflect.runtime.universe._ val clazz = classOf[AwesomeClass] val mirror = runtimeMirror(clazz.getClassLoader) val symbol = mirror.classSymbol(clazz) println(symbol.annotations) // prints 'List(Awesome)' 不幸的是,Scala反思仍然是实验性的,在这一点上实际上是不稳定的(SI-6240或SI-6826是相当严重问题的例子).然而,长期来看,它似乎是最直接的替代Java反射和注释. 至于现在,人们必须使用Java注释,我认为这是一个很好的解决方案. 关于DI / ORM / WS /序列化的框架和库 – Scala在这方面依然似乎还不成熟,至少不像Java那样.目前有许多针对这些问题的正在进行的项目,其中一些已经很好,其他的还在发展中.列举出我想到的几点:Squeryl,Slick,Spray,Pickling. 此外,Scala还具有一些高级功能,通常会使注释不必要.类型类(用隐式参数实现)可能是很好的例子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |