【发布时间】:2016-04-02 15:11:29
【问题描述】:
我正在尝试对带有类型参数的自定义类进行模式匹配:
class Foo[A]
def isMyFoo[A: ClassTag](v: Any) = v match {
case mine: Foo[A] => "my foo"
case other: Foo[_] => "not my foo"
case _ => "not a foo"
}
那行不通;不管Foo是什么类型,我都会得到"my foo"。
我能够做出这样的事情的唯一方法是:
class Foo[A](implicit t: ClassTag[A]) {
val tag = t
}
def isMyFoo[A: ClassTag](v: Any) = v match {
case foo: Foo[_] =>
if (foo.tag == classTag[A]) "my foo"
else "not my foo"
case _ => "not a foo"
}
有没有更优雅的方法呢?我必须将ClassTag 保留在Foo 中吗?
【问题讨论】:
标签: scala generics reflection