首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型类型的模式匹配

泛型类型的模式匹配
EN

Stack Overflow用户
提问于 2018-11-28 23:14:16
回答 2查看 101关注 0票数 0

我需要知道泛型类型是否是字符串,以便对其执行不同的逻辑,例如:

代码语言:javascript
复制
def compute[A](field: String, record: GenericRecord): A match {
   case String => record.get(field).asInstanceOf[Utf8].toString
   case _ => record.get(field).asInstanceOf[A]
}

但我不知道怎样才能得到这类药。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-29 00:43:23

如果不需要处理嵌套类型,可以使用ClassTag进行匹配,如果需要,可以使用TypeTag

代码语言:javascript
复制
import scala.reflect.{ClassTag, classTag}

def compute[A: ClassTag](field: String, record: GenericRecord): A = {
  if (classTag[A] == classTag[String]) {
    record.get(field).asInstanceOf[Utf8].toString.asInstanceOf[A]
  } else {
    record.get(field).asInstanceOf[A]
  }
}

对于TypeTag,则导入scala.reflect.runtime.universe.{TypeTag, typeTag},并将ClassTag改为TypeTag,将classTag更改为typeTag

票数 3
EN

Stack Overflow用户

发布于 2018-11-28 23:55:10

也许像这样的东西(可能是可以优化的):

代码语言:javascript
复制
import scala.reflect.ClassTag

def m[A](x: Any)(implicit tag: ClassTag[A]): A = {
  tag.toString match {
    case "java.lang.String" =>
      (x.toString + " is a string").asInstanceOf[A]
    case _ =>
      x.asInstanceOf[A]
  }
}

println(m[String]("123")) // 123 is a string
println(m[Int](456)) // 456
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53529536

复制
相关文章

相似问题

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