我正坐在一个大约 10000 LoC 的项目前面。我必须将此项目从 Scala 2.9 更新到 2.10。这做得很好,但由于清单,我收到了许多弃用警告。
用了stackoverflow等很多网站的搜索功能后,也没有那么多疑问了。我想总结一下;关键点是:
TypeTags 和 ClassTags 比 Manifests 和 ClassManifest 好得多。特别是您可以将它们用作同义词(TypeTags <-> Manifests 和 ClassTags <-> ClassManifest)
TypeTags 比 ClassTags 更强大,ClassTags 分别是更受限制的 TypeTags。我的第一个问题:在这个项目中,
manifest[T].erasure.getSimpleName
经常使用该方法。现在我不仅可以将其切换为,typeTag[T].runtimeClass.getSimpleName
因为代码不会编译,而是classTag[T].runtimeClass.getSimpleName
可以编译。这会影响语义吗?(注意:该方法erasure
也已弃用;您必须改用该方法runtimeClass
)第二个问题: Scala 2.9 中清单的类型检查类似于:
manifest[T] <:< manifest[A]
. 在 Scala 2.10 中,我会写这个typeOf[T] <:< typeOf[A]
. 但是<:<
被弃用了?!我可以将 TypeTag 转换为 ClassTag 吗?即:如果我只使用清单进行类型检查(Nr. 3)和名称提取(Nr. 2):我可以将每个 Manifest/ClassManifest 重命名为 ClassTag 吗?