【问题标题】:Scala: Retrieve class-name from ClassTagScala:从 ClassTag 中检索类名
【发布时间】:2018-02-02 05:40:39
【问题描述】:

如果可能的话,我正在编写一个通用方法,它可以将Any 类型的参数转换为传递的ClassTag[T] 类型的对象。

def getTypedArg[T: ClassTag](any: Any): Option[T] = {
      any match {
        case t: T => Some(t)
        case invalid =>
          logger.warn(s"Invalid argument: $invalid")
          None
      }
}

我希望日志消息精确如下:

case invalid => logger.warn(s"Invalid argument: $invalid of type $className")

如何从ClassTag[T] 中检索className

或者,是否有一种完全不同的方法可以更好地服务于我的用例?

【问题讨论】:

标签: scala generics


【解决方案1】:

添加此导入语句

import scala.reflect._

并将日志语句更改为,

logger.warn(s"Invalid argument: $invalid of type ${classTag[T].runtimeClass}")

这是取自 Scala classOf for type parameter

【讨论】:

  • 那行得通;我进一步添加了getSimpleName 以将带有包的合格类名 com.company.package.A$A45$A$A45$MyClass 转换为只是类名 MyClass,即classTag[T].runtimeClass.getSimpleName
猜你喜欢
  • 1970-01-01
  • 2018-10-06
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2016-07-27
  • 2023-03-17
  • 2020-02-13
相关资源
最近更新 更多