本文介绍了Scala:从ClassTag中检索类名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  def getTypedArg [T:ClassTag](any:Any) :选项[T] = {
任何匹配{
case t:T =>一些(t)
案件无效=>
logger.warn(sInvalid argument:$ invalid)
None
}
}

我希望 log message 更精确,如下所示:

  case invalid => logger.warn(sInvalid argument:$ invalid of type $ className)






如何从 ClassTag [T] 中检索 className



另外,是否有一种根本不同的方法可以更好地服务我的用例?

解决方案

添加此导入语句

  import scala.reflect._ 

并将记录语句更改为,

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

这取自


I'm writing a generic method that can convert Any type argument to the an object of passed ClassTag[T] type, if possible.

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

I want the log message to be more precise like this:

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


How can I retrieve className from the ClassTag[T]?

Alternatively, is there a fundamentally different approach that can serve my use-case better?

解决方案

Add this import statement

import scala.reflect._

and change the logging statement as,

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

This is taken from Scala classOf for type parameter

这篇关于Scala:从ClassTag中检索类名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-19 20:36