加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

什么是scala替代运行时保留的注释

发布时间:2020-12-16 09:16:04 所属栏目:安全 来源:网络整理
导读:我只是意识到我不能在 scala中有注释,在运行时被保留和分析.我也检查了 this question,但我没有得到它什么是替代品. DI – 一个答案提到在scala中不需要DI框架.虽然在基础上可能是这种情况(虽然我不太喜欢that example;处理DI的惯用方式是什么?),但像Spring
我只是意识到我不能在 scala中有注释,在运行时被保留和分析.我也检查了 this question,但我没有得到它什么是替代品.

> DI – 一个答案提到在scala中不需要DI框架.虽然在基础上可能是这种情况(虽然我不太喜欢that example;处理DI的惯用方式是什么?),但像Spring这样的Java DI框架相当先进,可以处理诸如计划作业,缓存,管理持久性等等,全部通过注释,有时是自定义的.
> ORM – 我承认我没有尝试过任何本机Scala ORM,但是从我看到的这个角色,它也使得一些使用注释,这意味着它们是不可避免的?
>任何序列化工具 – 你如何惯用自定义序列化输出到JSON / XML / …?
> Web服务框架 – 如何定义(代码)RESTful或SOAP服务的映射,标题等?

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还具有一些高级功能,通常会使注释不必要.类型类(用隐式参数实现)可能是很好的例子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读