我想定义一个可以比较两种类类型的函数。我定义了两个不同的类:
abstract class Task
case class DefinedTask(id: Long) extends Task
case class EmptyTask() extends Task
然后我有一个返回类型对象的函数Task
,它可以是DefinedTask
或EmptyTask
。
现在,我想做的是有一个函数来识别这个对象是 aDefinedTask
还是只是一个EmptyTask
. 问题很简单,我会使用模式匹配。但我想概括它,因为多个类都采用这种Defined/Empty
模式。
到目前为止我尝试的是:
def makeReturned[T: Manifest, U: Manifest](obj: T)(u: U)(f: T => Value) =
if(manifest[U] equals manifest[T]) f(obj) else
throw new IllegalArgumentException()
}
//call to it
makeReturned(task)(DefinedTask)(makeTask)
U
总是DefinedTask
,T
可能是DefinedTask or EmptyTask
,但它返回为Task
.
manifest[U].erasure.toString //"class DefinedTask$"
manifest[T].erasure.toString //"class Task"
从编译器的角度来看这是正确的,但它不适合我。所以,我的问题是我怎样才能以一种能给我想要的方式比较它们?