将任何对象作为参数的函数

时间:2017-01-10 11:45:19

标签: scala pattern-matching type-parameter

import scala.reflect.runtime.universe._
import scala.reflect.ClassTag

class A
class B

def foo[A](x: A) = typeOf[A] match {
    case x:A => println("this an A")
    case _ => println("no match")
  }
}

但是这将证明无用,因为不可能匹配,我得到:

fruitless type test: a value of type runtime.universe.Type cannot also be a A

我希望foo获取任何type类,从基本类型到自定义类。我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用ClassTag以下方式实现目标

import scala.reflect.ClassTag

def foo[A: ClassTag](x: A) = x match {
  case x: A => println(s"this an ${x.getClass}")
  case _ => println("no match")
}

A可以是任何类型。