首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Manifest[T].erasure在2.10中被弃用,我现在应该使用什么?

Manifest[T].erasure在2.10中被弃用,我现在应该使用什么?
EN

Stack Overflow用户
提问于 2013-03-19 10:22:42
回答 2查看 2.3K关注 0票数 8

我有以下代码:

代码语言:javascript
复制
object Log {

  def get[T](implicit manifest : Manifest[T] ) = {
    LoggerFactory.getLogger( manifest.erasure.getName )
  }

  def getByName( name : String ) = {
    LoggerFactory.getLogger(name)
  }

}

我们的想法是这样使用它:

代码语言:javascript
复制
object SimpleFuture {
  val log = Log.get[SimpleFuture[Throwable,Nothing]]
}

但是编译器(2.10)现在说manifest.erasure已被弃用。我现在应该使用什么来实现相同的功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-19 10:36:11

最简单的修复方法是用runtimeClass调用替换对erasure的调用。如果您使用-deprecation运行,编译器实际上会给出这个建议:

代码语言:javascript
复制
warning: method erasure in trait ClassManifestDeprecatedApis is deprecated: Use runtimeClass instead

或者,您可以使用class标记:

代码语言:javascript
复制
def get[T](implicit tag : reflect.ClassTag[T] ) = {
  LoggerFactory.getLogger( tag.runtimeClass.getName )
}

与使用Manifest相比,这种替代方案更适合未来使用。Manifest将在2.10或更快的版本中被弃用。有关更多信息,请参阅this document的“类型标记和清单”部分。

票数 10
EN

Stack Overflow用户

发布于 2013-06-19 11:48:24

如果像我一样,您只对避免弃用警告感兴趣,那么您也可以使用manifest.runtimeClass.getName (而不是manifest.erasure.getName)。

即:

代码语言:javascript
复制
def classOp[T](implicit manifest: Manifest[T]) {
  println("Class: " + manifest.runtimeClass.getName)
}

我还发现了另一种我不完全理解的技术,可能有用,也可能没用……

代码语言:javascript
复制
def classOp[T <: Any : Manifest] {
  println("Class: " + manifest[T].runtimeClass.getName)
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15490486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档